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中然后再发送到不同的服务端服务中去。 这是客户端的第二层负载。

相关推荐
xixixi7777731 分钟前
从Mythos到GPT-5.4-Cyber:AI安全竞赛的“双轨”分化与防御新范式
网络·gpt·安全·机器学习·架构·大模型·claude
xiaobangsky1 小时前
Linux SMB/CIFS 网络挂载配置指南
linux·运维·网络
XmasWu12251 小时前
【Hermes Agent进阶】开发自定义技能
网络·数据库
科技牛牛1 小时前
IP定位误差导致封号_深度解析
网络·网络协议·tcp/ip
Olivia051405141 小时前
Voohu:音频变压器在平衡传输与地环路隔离中的设计要点
网络·机器人·信息与通信
俺不要写代码1 小时前
线程启动、结束,创建线程多法、join,detach,线程的移动语义
服务器·开发语言·网络·c++
老鱼说AI1 小时前
CSAPP深入理解计算机系统第三章:汇编语言基础
网络
思麟呀1 小时前
应用层协议HTTP
linux·服务器·网络·c++·网络协议·http
RTC老炮2 小时前
RaptorQ前向纠错算法架构分析
网络·算法·架构·webrtc
qq_283720052 小时前
Python模块精进: urllib 从入门到精通
网络·爬虫·python