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调用的远程服务

相关推荐
爱吃提升4 小时前
Dev-C++ 5.11 完整版快捷键大全(信奥/初学适用)
c语言·c++
进击的荆棘4 小时前
Linux系统——库的原理与制作之ELF文件的形成与加载的过程(下)
linux·动静态库
CrazyMo_5 小时前
鸿蒙高级——内存专用之linux-reserve-memory 方案简介
linux·运维·服务器
灯澜忆梦5 小时前
【Linux】#5 | 文件与目录基础操作命令
java·linux·运维
SWAGGY..5 小时前
【C++进阶】:(10)哈希表的原理与实现——从哈希函数到哈希桶
c++·哈希算法·散列表
码匠许师傅5 小时前
【C++三方组件】redis-plus-plus:现代 Redis C++ 客户端
java·c++·redis
wuminyu5 小时前
stackChunkOop内部结构与GC屏障的配合工作原理剖析
java·linux·c语言·jvm·c++
青衫客365 小时前
从网卡到 Socket:再探 Linux 网络协议栈与 iptables 数据包处理流程
linux·网络·网络协议
承渊政道5 小时前
Linux网络学习【TCP Socket编程实战:connect的断线重连与客户端访问Linux验证】
linux·网络·学习·ubuntu·tcp·socket编程
小π军5 小时前
C 和 C++ 是否都支持函数的重载?
java·c语言·c++