目录

0.入门学习链接

1.客户端中涉及的类的介绍

1.1 TarsClient(客户端类)

1.2 Communicator(通信器类)

1.3 ServantProxyFactory&ServantProxy(服务代理工厂类和服务代理类)

1.4 CommunicatorEpoll(客户端网络处理的线程类)

1.5 ObjectProxyFactory&ObjectProxy(服务实体工厂类和服务实体类) 

1.6 TC_Epoller(epoller操作类)

1.7 EndpointManager(框架内部的路由管理的实现类)

1.8 QueryEpBase(路由请求与回调的实现类)

1.9 AdapterProxy类

1.10 Transceiver(网络传输基类, 主要提供send/recv接口)

1.11 AsyncProcThread(异步回调后的处理线程)

1.12  TC_CasQueue(线程安全队列,是类模板)

1.13 ReqMessage(请求队列类)

2. 初识客户端

2.1 总览

2.2 Communicator

2.3 ServantProxy与ServantProxyFactory

2.4 CommunicatorEpoll

2.5 ObjectProxy与ObjectProxyFactory

2.6 客户端初始化时重要类之间的关联关系


0.入门学习链接

TARS基金会-微服务开源框架TARS的RPC源码解析之初识TARS-C++客户端

tars客户端(一):一次rpc的调用过程--写的很好

1.客户端中涉及的类的介绍

1.1 TarsClient(客户端类)

1.2 Communicator(通信器类)

1.3 ServantProxyFactory&ServantProxy(服务代理工厂类和服务代理类)

1.4 CommunicatorEpoll(客户端网络处理的线程类)

1.5 ObjectProxyFactory&ObjectProxy(服务实体工厂类和服务实体类)

1.6 TC_Epoller(epoller操作类)

1.7 EndpointManager(框架内部的路由管理的实现类)

1.8 QueryEpBase(路由请求与回调的实现类)

1.9 AdapterProxy类

1.10 Transceiver(网络传输基类, 主要提供send/recv接口)

1.11 AsyncProcThread(异步回调后的处理线程)

1.12  TC_CasQueue(线程安全队列,是类模板)

1.13 ReqMessage(请求队列类)

2. 初识客户端

2.1 总览

TARS的客户端最重要的类是Communicator,一个客户端只能声明出一个Communicator类实例,用户可以通过
CommunicatorPtr& Application::getCommunicator()获取线程安全的Communicator类单例。Communicator
类聚合了两个比较重要的类,一个是CommunicatorEpoll,负责网络线程的建立与通过ObjectProxyFactory生
成ObjectProxy;另一个是ServantProxyFactory,生成不同的RPC服务句柄,即ServantProxy,用户通过
ServantProxy调用RPC服务。下面简单介绍几个类的作用。

2.2 Communicator

一个Communicator实例就是一个客户端,负责与服务端建立连接,生成RPC服务句柄,可以通过
CommunicatorPtr& Application::getCommunicator()获取Communicator实例,用户最后不
要自己声明定义新的Communicator实例.

2.3 ServantProxy与ServantProxyFactory

ServantProxy就是一个服务代理,ServantProxy可以通过ServantProxyFactory工厂类生成,用户往往通过
Communicator的template void stringToProxy()接口间接调用ServantProxyFactory的
ServantPrx::element_type* getServantProxy()接口以获取服务代理,通过服务代理ServantProxy,用户
就可以进行RPC调用了. ServantProxy内含多个服务实体ObjectProxy(详见下文第4小点), 能够帮助用户在
同一个服务代理内进行负载均衡.

2.4 CommunicatorEpoll

CommunicatorEpoll类代表客户端的网络模块,内含TC_Epoller作为IO复用,能够同时处理不同主调线程
(caller线程)的多个请求。CommunicatorEpoll内含服务实体工厂类ObjectProxyFactory(详见下文),
意味着在同一网络线程中,能够产生不同服务的实体,能够完成不同的RPC服务调用。CommunicatorEpoll还聚
合了异步调用处理线程AsyncProcThread,负责接收到异步的响应包之后,将响应包交给该线程处理.

2.5 ObjectProxy与ObjectProxyFactory

ObjectProxy类是一个服务实体,注意与ServantProxy类是一个服务代理相区别,前者表示一个网络线程上的某
个服务实体A,后者表示对所有网络线程上的某服务实体A的总代理,更详细的介绍可见下文。ObjectProxy通过
ObjectProxyFactory生成,而ObjectProxyFactory类的实例是CommunicatorEpoll的成员变量,意味着一个
网络线程CommunicatorEpoll能够产生各种各样的服务实体ObjectProxy,发起不同的RPC服务. ObjectProxy
通过AdapterProxy来管理对服务端的连接。

2.6 客户端初始化时重要类之间的关联关系

【TARS】TARS-CPP客户端学习一相关推荐

  1. 【TARS】TARS-CPP客户端学习二

    目录 0.测试代码路径与说明 1.helloworld客户端的线程情况 1.0 线程总体分布 1.1线程一(main线程) 1.2 线程二(StatReport线程) 1.3 线程三(TC_TimeP ...

  2. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  3. 开源中国iOS客户端学习——(十二)用户登陆

    ---------------------------------------------------------------------------------------------------- ...

  4. 开源中国iOS客户端学习——(八)网络通信AFNetworking类库

    AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择: AFNetworking类库×××和使用教程: https://github.com/AFN ...

  5. cpp程序设计学习与实验系统(c语言程序设计软件) 注册码,cpp程序设计学习与实验系统...

    cpp程序设计学习与实验系统是一款简单易用的C/C++程序设计教学演示.学习与实验软件,C和c++语言是计算机程序设计语言,这种语言在初学环节非常难懂,学习起来非常费力,尤其是里面的函数,记忆起来难上 ...

  6. Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout

    左右滑动的控件我们使用的也是非常多了,但是基本上都是使用的viewpager 等 android基础的控件,那么我们有么有考虑过查看他的源码进行定制呢?当然,如果你自我感觉非常好的话可以自己定制一个, ...

  7. 开源中国iOS客户端学习——(一)Prefix.pch文件

    2019独角兽企业重金招聘Python工程师标准>>> 当我们新建一个工程的时候,在Supporting FIles文件下会看到一个以  -Prefix.pch结尾文件的文件,pch ...

  8. 开源中国iOS客户端学习——(五)网络通信ASI类库(1)

    如今的应用大部分基予网络,在开源中国iOS客户端源码中关于网络通信方面用了三个类库,ASI和AFNetworking,还有一个苹果官方给出的Reachability用于检测当前网络状况,本文介绍当前用 ...

  9. android新闻客户端实验报告,Android 新闻客户端学习笔记

    学习了新闻客户端开发后,有很多是通用的,就把客户端用到的一些做个笔记,已备以后使用,主要用到的知识点有: 1.  Android网络编程 2.  Android中BaseAdapter的使用 3.   ...

最新文章

  1. Coursera Machine Learning 作业提交问题
  2. html用div做出一颗树的效果,用Scrapy建造一棵树
  3. CeneOS中使用Docker安装Gitlab
  4. simulink中不能改名_《和平精英》没有卡如何解决 改名字方法
  5. javaweb学习总结(十六)——JSP指令
  6. 使用React的static方法实现同构以及同构的常见问题
  7. 5001 boost之bind库函数
  8. vb net的定时循环_Python3-定时任务的四种实现方式
  9. C#针对js escape解码
  10. grafana的前端技术_Grafana开发环境搭建
  11. 一个软件公司需要多少前端_内幕!软件外包公司开发一个软件需要多少钱?
  12. NSA的各种***工具
  13. 服务器虚拟化发展的趋势,2013年服务器虚拟化九大发展趋势
  14. windows下远程连接Mysql
  15. 2016 西班牙 国家德比(西甲31轮)
  16. 管道的故事(一)管道的故事
  17. 流量、电量、弱网环境怎么测?
  18. 用Python制作一个文件加密器(支持中文)
  19. 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
  20. マーケティング用語の英訳一覧(Glossary of marketing terms)

热门文章

  1. STM32GX低功耗学习笔记一
  2. Google翻译参数解密(11-11)
  3. EJB3+JBoss5+Myeclipse9创建HelloWorld实例
  4. css禁止图片保存,CSS的图片保存后面目全非?教你快速解决
  5. 视频帧率对人眼主观感受的影响
  6. 传智播客Java基础入门,浅谈JAVA开发规范与开发细节(上
  7. Linux i2ctool 工具的使用方法
  8. APK汉化手记 现金流游戏放出
  9. 日撸leetCode三道题---Day4---双指针和字符串
  10. python根据txt文本批量创建文件夹