在这里插入图片描述
服务端网络通信 RMI
一、摘要
RMI( Remote Method Invocation),远程方法访问。在做C/S开发中,让我们可以不必关心底层网络通讯细节,也可像调用本地对象方法一样调用远端对象方法,方便了业务流程。
从上述图片可以看出RMI在端对端通信的处理方式 客户端请求——>服务端响应处理——>客户端回调处理。
业务场景例子:用户请求另一个离线用户的信息,此时服务端global的用户信息没有该用户,这个时候我们就需要到数据库查询该离线用户信息,数据库返回信息。在此应用场景中,我们会在服务器A(数据库的服务器)上定义业务需要的查询数据方法例如GetUserInfo,GetUserName等等数据库查询方法,我们需要在服务器B(业务处理的服务器)上调取数据库定义的查询接口 并将获得的数据返回。但是服务器B并不能直接调服务器A的方法,那么我们该怎么搞呢?
RMI就是干这件事的工具,我们先建立服务器A查询方法调用的映射表,约定通信编码格式,服务器B通过RMI通信携带的方法名和CallBackObject,调用了服务器A的查询方法,并将查询所需的信息存到了CallBackObject,服务端B在CallBackObject时做相应的业务处理。
二、基本业务流程
1、method_list 初始化
服务器在初始化时会创建相应业务的RMIObject模块 例如Login、User、System等等,并将相应的RMI服务按照名字和地址绑定到对象管理器。
2、CreateRMISession
客户端和服务器建立socket网络链接,创建客户端session并关联到session_list(通信结算之后session会被释放)
3、OnRecvPackage
建立连接之后,开始正式rmi通信,客户端将参数对象序列化后,发起服务请求
4、RecvRMICallHelper
服务端反序列化获取参数对象,查找对应模块,调用rmi服务函数
5、rmisession Return
将处理结果序列化,发送客户端
6、OnRecvPackge
客户端反序列化,通过id查找 对应backobj处理结果
整个业务流程:RmiModule(客户)->Session(客户)->NetWork->Session(服务)->RmiModule(服务)–>RmiModule(客户)->Session(服务)->RmiModule(服务)–>RmiModule(客户)