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

相关推荐
@encryption10 分钟前
HCIA第一次作业
网络
小心我捶你啊13 分钟前
SOCKS5与HTTP代理的差异与应用场景抉择
网络·网络协议·http
147API14 分钟前
Claude 4.6 API 接入全流程避坑:OpenAI 迁移、长上下文超时、429 限流一次讲清
运维·服务器·网络·claude·api大模型
数据知道28 分钟前
claw-code 源码分析:洁净室重写——在公开仓库里如何做「学得会、抄不得」的架构迁移?
网络·ai·claude code
很懒的程序员雄30 分钟前
OpenClaw 快速上手
网络·ai
数据知道30 分钟前
claw-code 源码分析:Python 快迭代 + Rust 硬化——双轨策略的成本、收益与边界在哪里?
网络·ai·claude code
派大星酷36 分钟前
跨域是什么 有什么影响 怎么解决
java·网络
wanhengidc43 分钟前
云手机 热血传奇游戏挂机
服务器·网络·安全·游戏·智能手机
航Hang*1 小时前
网络安全技术基础——第3章:网络攻击技术
运维·网络·笔记·安全·web安全·php
OPHKVPS1 小时前
React2Shell漏洞攻击中的新型恶意软件EtherRAT详解
网络·安全·web安全