rpc核心

被面试官问过这样一个问题:“假如要你实现一个rpc框架,客户端和服务端你要考虑哪些东西?”

rpc框架负责屏蔽底层的传输方式(tcp或者udp)、序列化方式(xml/json/二进制)和通信细节,服务调用者可以像调用本地接口一样调用远程服务,而不需要关心底层通信细节和调用过程。

rpc的组件一般有服务注册与发现、负载均衡、序列化/反序列化、编解码、网络传输、线程池、动态代理、连接池等。

服务注册与发现,可以采用Eureka或者Nacos。

自定义协议、编解码

所谓协议,就是通信双方事先商量好规则,服务端知道发送过来的数据将如何解析。

网络传输协议

tcp、udp、http、http2.0

 

成熟的rpc框架一般会提供四种调用方式,分别是同步阻塞、异步非阻塞、

rpc一般是长连接。

在回调的时候,需要用到上下文管理器

1、客户端生成请求id

2、客户端生成请求上下文,上下文中包含发送时间、回调函数等信息

3、上下文管理器记录请求id与上下文的映射关系

4、将请求id打在请求包里发给服务端

5、服务端将请求id打在响应包里返回

6、客户端根据响应包中的请求id,通过上下文管理器找到原来的上下文

7、从上下文中拿到回调函数

8、执行回调函数。

 

除了上下文管理器,还有一个超时管理器,用于实现请求包超时的回调处理。

超时管理器会对上下文管理器中的上下文进行扫描,看上下文中请求等待回包是否过长,如果过长,就不再等待回包,直接超时回调,并将上下文从上下文管理器中删掉。

posted on 2017-06-11 16:16  koushr  阅读(228)  评论(0编辑  收藏  举报

导航