Rpc服务的提供方(Rpcprovider)的调用流程

首先,服务的提供方,会通过rpcprovider向rpc服务方注册rpc服务对象和服务方法,

那么,我们通过protobuf提供的抽象层的service和method,将服务对象和它所对应的服务方法记录在map表中,

当它启动以后,这里面相当于启动了一个epoll+多线程的服务器,

启动以后就可以接收远程的连接,远程如果有新连接过来的话,muduo库会帮我们回调onconnection(如果有客户端断开,服务端收到了,将相应的连接shutdown,释放socket资源)

onmessage等待远程rpc的调用请求,数据过来之后,按我们协商好的数据格式解析,最终解析出service_name、method_name和方法调用参数等数据,从抽象层动态的生成method的请求(request)和响应(response),将参数填到请求中(反序列化)

response由业务来填

再生成一个回调,

然会在框架上调我们业务的方法,

然后业务中login方法就会被调用(从请求中拿数据、做本地业务、给response填响应消息、执行回调)

在这个回调中调用我们绑定的方法,

绑定的方法做的是将响应进行一个序列化,然后通过网络发送回去,发送回去后,我们由rpc的提供者主动关闭这条连接,省资源,给其它rpc客户端再继续提供服务

结合muduo和protobuf,可以用很少的代码将这个框架的一部分,可以借助rpcprovider类来发布一个本地服务,将本地服务发布成一个支持rpc调用的远程服务

相关推荐
jake·tang2 分钟前
深度解析 VESC 参数辨识源码:电阻、电感与磁链
arm开发·c++·嵌入式硬件·算法·数学建模·傅立叶分析
MaikieMaiky3 分钟前
C++STL 系列(三):deque 容器详解与示例
开发语言·c++
韩明君7 分钟前
Debian12安装RabittMQ 4.3.0
linux·debian·高并发·debian12·rabittmq
南境十里·墨染春水8 分钟前
线程池学习(三) 实现固定线程池
开发语言·c++·学习
nazisami14 分钟前
初识AVL树
c++·面向对象·avl树
未来超低端科技研究所16 分钟前
大恒工业相机c#开发,NET8跨平台使用(armlinux和x86linux)
linux·c#·工业相机·net8·大恒图像·跨平台开发
Languorous.17 分钟前
Linux 系统安装 MySQL(CentOS8/Ubuntu),命令行实操完整版
linux·mysql·ubuntu
_童年的回忆_20 分钟前
【Linux】安装Jenkins并且打包发布springboot项目
linux·spring boot·jenkins
小小de风呀21 分钟前
de风——【从零开始学C++】(七):string类详解
开发语言·c++·算法
江屿风22 分钟前
【c++笔记】类和对象流食般投喂(中)
开发语言·c++·笔记