设置解析协议、选择服务端节点、建立连接、管理连接,如何发送请求、接收结果,这些细节都封装在了ObjectProxy中。
先说明ObjectProxy包含的主要组件,然后介绍组件间的调用关系。
Transceiver才是“真正”干活的哥们。最基础的系统操作如::send和::readv都是在这里被封装的。设计Transceiver时候考虑的要素如图2。
void ObjectProxy::invoke(ReqMessage * msg)
{
//选择一个远程服务的Adapter来调用
AdapterProxy * pAdapterProxy = NULL;
//EndpointManager* _endpointManger
//selectAdapterProxy是封装的节点选择策略
bool bFirst = _endpointManger->selectAdapterProxy(msg, pAdapterProxy);
pAdapterProxy->invoke(msg);
}
下面继续用精简后的代码说明AdapterProxy 内部组件关系
int AdapterProxy::invoke(ReqMessage * msg)
{
//TC_TimeoutQueueNew* _timeoutQueue
//未发链表有长度限制,如果请求队列满了,就不发到server端了
if(_timeoutQueue->getSendListSize() >= _noSendQueueLimit)
{
finishInvoke(msg);
return 0;
}
//对应的是图1中的ProxyProtocol
_objectProxy->getProxyProtocol().requestFunc(msg->request, msg->sReqData);
//交给连接发送数据,连接连上,buffer不为空,直接发送数据成功
//Transceiver* _trans
if(_timeoutQueue->sendListEmpty() && _trans->sendRequest(msg->sReqData.c_str(),msg->sReqData.size()) != Transceiver::eRetError)
{
}
return 0;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。