java rpc

这两天看公司的一个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,这里不做介绍了

原文地址:https://www.cnblogs.com/cane/p/5219671.html