mprpcapplication
框架的初始化做了什么
通过 -i 传的文件进行判断文件中的服务的ip与port和zk的ip和port。将对应的ip和port通过哈希map进行储存,为了后续调用做准备。
rpcprovider
rpcprovider内通过使用哈希map存储服务名与方法。在run之后将服务通过muduo库挂起,在muduo的epoll_wait启动之前在zk服务端上创建相应节点。
设置相应的回调事件,对接收的数据进行分析判断,筛选出来。为了防止粘包等需要制定一个双方的协议:
通过相应的头数据来解析后续要读取的大小,这个需要双方来规定,项目中规定字符串前面四个字节用来描述后面这个RpcHeader数据的大小,再根据这个类中成员变量args_size来获得后续参数。再根据方法名字找到方法,通过服务类提供的GetRequestPrototype()方法获得定义的request类和response类,再进行参数的ParseFromString就可以得到具体的参数了。最后通过protobuf的service类调用CallMethod来帮我们调用我们重写的远程调用。
MprpcChannel
因为stub桩类的方法具体实现就是内部的成员变量调用自己的成员方法,成员方法CallMethod是一个纯虚函数,需要多态的方法继承下来之后重写所以有了MprpcChannel。
具体重写就是根据用户填进来的数据进行数据组装,然后连接服务注册中心进行查询,如果查询到了ip和端口就调用tcp传输。