RPC基本实现--慕课学习总结
其实RPC远程服务调用,一般用于调用不在同一个运行环境里的服务。http我理解是其中大含义中的一种,只不过互相之间的通讯方式不同,目的都是一样的,获取信息。
RPC一般最简单包含上图三层,实体分别是:
客户端、服务端、客户端存根(存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方)、服务端存根(接收客户端发送过来的消息,将消息解包,并调用本地的方法)、信息传输。
实现步骤分别是:
1、协议模块:
(1)定义网络传输的端点(IP、端口)
(2)定义服务描述(对应的类,类里面的方法,入参类型,返回值类型)
(3)定义服务请求(要调用的服务,请求入参)
(4)定义服务应答信息(应答码、应答信息、返回数据)
2、序列化模块:
(1)客户端请求数据、服务端应答数据序列化方法
(2)客户端处理应答数据、服务端获取请求数据反序列化方法
3、网络传输模块:
(1)客户端创建连接、发送数据等待响应、关闭连接,主要处理内容为发送数据等待响应
(2)服务端启动服务、监听端口请求、接受请求、停止服务:【这里有难点后续学习】
创建一个jetty server用于网络监听……
4、服务端模块
(1)配置模块:传输模块、序列化模块、反序列化、服务端IP、端口
(2)服务实例:表示一个具体服务(服务对象类,服务方法)
(3)服务调用:利用反射,调用服务对象类中的服务方法,并传入请求参数
(4)服务管理:用一个服务列表Map存放<服务描述,服务实例>,实现服务注册、服务查找
其中服务注册是:逐个获取服务实例中的对象类所有的公用方法,对每个方法形成一个服务实例,添加对于的服务描述,并将这个方法添加到服务列表的Map中,服务查找则是Map中的get方法。
(5)服务端的实现:实现请求处理,如下图,获取传输模块中的创建好的服务器,传入配置中的端口和请求实现处理类并作初始化服务传输处理模块,将以上所有的实现组合在一起
5、客户端模块
(1)配置模块:传输模块、序列化模块、反序列化、服务端点选择的实现类,每个client需要建立的连接数、可连接的服务器列表
(2)调用远程服务代理类:
其中远程服务调用细节如下:
(3)服务端点选择
用ArrayList存放连接的端点,初始化一个个连接服务端点的IP和端口,并添加到ArrayList中
获取连接端点、释放连接端点、关闭连接
(4)客户端的实现:即以上所有的实现合并在一起,即先配置好客户端所需的类,同时通过上诉远程调用代理类的实现,完成服务代理类的返回
最后的例子如下:
服务:
客户端:
服务端: