RPC 轻量级框架高并发处理

 

RPC(远过程调用)在分布式系统中是很常用的基础通讯方式,核心思想是将不同进程之间的通讯抽象为函数调用。

基本的过程是:

1、调用端将参数序列化到流中并发送给服务端

2、服务端从流中反序列化出参数并完成实际的处理

3、将结果序列化后返回给调用端。

通常的RPC由接口形式来定义,接口定义服务的名字,接口方法定义每个请求的输入参数和返回结果,并且RPC内部的序列化、网络通讯等实现细节则由框架来完成,对开发人员来说是完全透明的。

RPC结构的一个轻量级框架结构图:

根据上图的结构,描述一下rpc的详细过程:

一、启动过程

1、Rpc-server 负责启动rpc服务,服务启动时开始监听制定的端口号;

2、启动时将绑定服务处理的Handler(Rpc-Handler),以及Encoder类与Decoder类

3、启动后调用RpcRegister类的egister方法,将发现的Rpc服务注册到服务调度中心

二、 客户端同步调用过程

1、用户通过Proxy 类创建一个Rpc服务客户端;

2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的send方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server;

3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;

4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;

5、客户端收到回应之后调用Decoder类进行反序列化,如果有异常就抛出,否则返回服务端的返回值

三、客户端异步调用过程

1、用户通过Proxy 类创建一个Rpc服务客户端;

2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的call方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server,请求发送完成后,客户端继续执行剩余业务逻辑;

3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;

4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;

5、如果用户注册了回调函数,则客户端收到回应之后调用Decoder类进行反序列化,然后执行回调逻辑;如果没有注册回调函数,那么客户端发送完请求后就结束了

源码见附件

注:感谢各位网友贡献的源码,大部分源码都是使用别人的,本人只是在这基础上进行的部优化。

猜你喜欢

转载自muruiheng.iteye.com/blog/2282221