tars-网络层-客户端实现
2021-05-23 14:20:21 0 举报
鹅厂开源微服务框架
作者其他创作
大纲/内容
Transceiver网络传输基类,主要提供send/recv接口
+
getObjectProxy
派生
3)run循环handle发包invoke
ServantProxyFactory
ServantPrx远程对象的本地代理(同名servant在一个通信器中只有一个实例)(协议文件的类会继承该类)
AdapterProxy每个Adapter对应一个Endpoint,也就是一个服务端口
ServantProxyThreadData线程私有数据
+getData获取线程数据,没有的话会自动创建+ReqInfoQueue * _reqQueue[MAX_CLIENT_THREAD_NUM]; 每个线程跟客户端网络线程通信的队列
+ServantProxyFactoryPtr +网络线程数组_communicatorEpoll[MAX_CLIENT_THREAD_NUM];+stringToProxy会根据传参obj的名字调用getServantProxy获得对应的servant代理类Communicator::initialize() 构造_communicatorEpoll网络线程处理类调用getServantProxy
TcpTransceiver TCP 传输实现
6)收包TcpTransceiver::doResponse
UdpTransceiver UDP 传输实现
1)调用接口生成的tars_invoke
EndpointManager框架内部的路由管理的实现类
+_locator+_objName+sEndpoints+ QueryFPrx _queryFPrx; 主控的路由代理节点列表set<EndpointInfo> _activeEndpoints;set<EndpointInfo> _inactiveEndpoints;
initiali构造_servantProxyFactory代理工厂对象getServantProxy
4)invoke
7)包收完了,处理RPC回调AdapterProxy::finishInvoke
8)push_back
5)发包出去trans-sendRequest
一次RPC调用过程可能出现的异常情况
+发送队列满了[TARS][ServantProxy::invoke msgQueue push_back error num:\" << pSptd->_netSeqthrow TarsClientQueueException(\"client queue full\")+ 超时:os << \"[ServantProxy::invoke timeout:\
构造ObjProxy、构造ServantProxy
ObjectProxy每个objectname在每个客户端网络线程中有唯一一个objectproxy
AsyncProcThread异步回调后的处理线程
+push_back+run:msg->callback->onDispatch(msgPtr)这里回调异步处理函数Ondispatch(函数由框架自动生成),至此完成一次RPC异步调用和回调的过程
CommunicatorEpoll客户端网络处理的线程类
+span style=\"font-size: inherit;\
2)处理收发包
0 条评论
回复 删除
下一页