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类进行反序列化,然后执行回调逻辑;如果没有注册回调函数,那么客户端发送完请求后就结束了
注:感谢各位网友贡献的源码,大部分源码都是使用别人的,本人只是在这基础上进行的部优化。