java rpc
2016-02-26 10:55
453 查看
这两天看公司的一个server的源码。
然后看了下里面的rpc实现,感觉很有意思。
大概实现一个rpc工具需要做如下工作:
1、定义序列化的对象,用于在client和server之间传递(接口的参数可以是序列化的,也可以把所有信息封装到一个可序列化对象当中进行传递)
比如:有接口ISample,方法有test(T1 x1, T2 x2)
你可以选择设置T1和T2为可序列化的,client端就可以直接通过代理调用这个方法
也可以如下:test(Invocation invo)->test(T1 X1,T2 X2)
传递的是封装好的可序列化的对象
2、选择io模式,是bio还是nio。当然现在大部分都是nio了
3、定义client和server的结构。这时候涉及动态代理。
4、server端要存储一个map:保存接口和对应的实现类的hash关系。
5、在server初始化的时候,需要传递被代理的对象,同时放到4中的map中
6、client获取动态代理的时候只需要传递接口的class就行,server会通过map去查询被代理实例
7、client中要实现以下socket,在执行代理的时候,连接到remote server
当然,其实通过http直接调用也是一种rpc,这里不做介绍了
然后看了下里面的rpc实现,感觉很有意思。
大概实现一个rpc工具需要做如下工作:
1、定义序列化的对象,用于在client和server之间传递(接口的参数可以是序列化的,也可以把所有信息封装到一个可序列化对象当中进行传递)
比如:有接口ISample,方法有test(T1 x1, T2 x2)
你可以选择设置T1和T2为可序列化的,client端就可以直接通过代理调用这个方法
也可以如下:test(Invocation invo)->test(T1 X1,T2 X2)
传递的是封装好的可序列化的对象
2、选择io模式,是bio还是nio。当然现在大部分都是nio了
3、定义client和server的结构。这时候涉及动态代理。
4、server端要存储一个map:保存接口和对应的实现类的hash关系。
5、在server初始化的时候,需要传递被代理的对象,同时放到4中的map中
6、client获取动态代理的时候只需要传递接口的class就行,server会通过map去查询被代理实例
7、client中要实现以下socket,在执行代理的时候,连接到remote server
当然,其实通过http直接调用也是一种rpc,这里不做介绍了
相关文章推荐
- java给图片添加水印文字
- spring整合hibernate配置文件
- 创建NativeActivity项目(Eclipse)
- Java 6 JVM参数选项大全(中文版)
- Spring AOP 切入点表达式
- Eclipse Ignored Resources
- Eclipse上GIT插件EGIT使用
- Java中Double型数据的加,减,乘,除
- JDK1.8 十大新特性详解
- java switch语句缺少break跳转之后的算法原理
- JAVA装饰器模式
- Spring BackOff退避算法(一)
- 项目添加native支持(Eclipse和AS)
- Java排序与查找
- java设计模式----状态模式
- 40个Java多线程问题总结
- myeclipse调试程序
- java中文转码
- Java 资源链接
- Java 中日期的几种常见操作 —— 取值、转换、加减、比较