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)客户端的实现:即以上所有的实现合并在一起,即先配置好客户端所需的类,同时通过上诉远程调用代理类的实现,完成服务代理类的返回

最后的例子如下:

服务:

客户端:

服务端:

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值