Tars RPC源码--C++客户端

Communicator:

客户端最重要的一个类,一个客户端只能生成一个Communicator类的实例,CommunicatorPtr& Application::getCommunicator(),获取线程安全的单例。

ServantProxy与ServantProxyFactory

ServantProxy是服务代理,可以由ServantProxyFactoy生成,用户往往通过stringtoProxy()接口间接调用getServantProxy()获取服务代理。 通过服务代理进行rpc调用。

CommunicatorEpoll

这是客户端的网络模块,里面有IO复用,能够处理不同的主调线程的 不同请求,里面包含服务工厂类,ObjectProxyFactory,在同一网络线程中可以生成不同的服务实例,发起不同的rpc调用。同时还有异步调用处理线程,接收到异步响应包时,将包传给相应的线程处理。

Tars客户端最重要的类是Communicator,聚合了两个重要的类,分别是CommunicatiorEpoll和ServantproxyFactory。

1.Communicator可以有n个网络线程,即n个CommunicatiorEpoll,每个CommunicatiorEpoll可以有不同的服务对象即ObjectProxy,这是第一层的负载均衡。

2.ServantProxyFactory是另一个重要的类,这个类可以生成相应的ServantProxy句柄,Communicator实例通过ServantProxyFactory成员变量的getServantProxyFactory接口构造foo服务的句柄时,会获取CommunicatiorEpoll下所有的foo的服务。

同时每个服务都有一个EndpointManager,分配到不同的adapterproxy中然后再发送到不同的服务端服务中去。 这是客户端的第二层负载。

相关推荐
古城小栈4 分钟前
MCP协议 与 Function Call 的有点分不清楚
网络·网络协议
深圳南柯电子16 分钟前
物联照明EMC整改:技术攻坚到系统化方案的全链路突破|南柯电子
网络·人工智能·互联网·实验室·emc
m0dw21 分钟前
原生websocket简单介绍
网络·websocket·网络协议
深海蓝山26 分钟前
WebSocket(java版)服务示例
java·websocket·网络协议
Awkwardx27 分钟前
Linux网络编程—传输层协议UDP和TCP
linux·网络·tcp/ip·udp
程序猿编码31 分钟前
Linux内核模块实现TCP连接强制断开机制
linux·网络·tcp/ip·内核·内核模块
真正的醒悟32 分钟前
图解网络9
网络
测试人社区—小叶子35 分钟前
Rust会取代C++吗?系统编程语言的新较量
运维·开发语言·网络·c++·人工智能·测试工具·rust
00后程序员张38 分钟前
Python 抓包工具全面解析,从网络监听、协议解析到底层数据流捕获的多层调试方案
开发语言·网络·python·ios·小程序·uni-app·iphone
辉视广播对讲44 分钟前
SIP广播对讲中调度台的作用及功能详解
网络