最近开始看Tair的源码实现,Tair的通信使用的是淘宝的开源的网络库tbnet实现。具体来说是依靠tbnet::Transport类型实现,其源代码路径如下:
http://code.taobao.org/svn/tb-common-utils/trunk/tbnet/src
下面介绍其通信流程:
1. 启动
Transport::start()完成其启动,主要工作是启动了两个线程:_readWriteThread和_timeoutThread. 这两个线程的实际入口函数式Tranport::run(), 下面是Transport::run的实现:

  1. void Transport::run(tbsys::CThread *thread, void *arg) {
  2. if (thread == &_timeoutThread) {
  3. timeoutLoop();
  4. } else {
  5. eventLoop((SocketEvent*)arg);
  6. }
  7. }

A. 读写线程:
        1. 读写线程使用epoll实现,在Transport中存在一个EPollSocketEvent _socketEvent 成员变量, arg传入的是这个成员变量的指针,EPollSocketEvent是epoll个操作的封装,在EPollSocketEvent的构造函数中会调用epoll_create初始化epoll。
        2. eventLoop的实现步骤如下:
                a.  调用socketEvent->getEvents() 取得发生的事件并放入到ioevents数组中
                        i.  调用epoll_wait等待读写事件;
                        ii. 每个事件的events[i].data.ptr存放有事件对应的IOComonet(socket 封装),可以用来处理读写事件;
                b.  对于读写事件,分别调用ioc->handleReadEvent()和ioc->handleWriteEvent()处理;
    
    B. timeout线程
        1. 主要用于检查通信的socket是否超过一定时常没有使用,对于TCPComponent(封装通信socket),如果15分钟没有使用,则断开连接;

2. 监听
通过调用Transport::listen()完成监听, 主要完成以下步骤:
    a.  创建TCPAcceptor,继承于IOComonet(socket 封装),并启动异步监听;
    b. 调用addComponent(acceptor, true, false);
            i.  创建epoll_event ev,设置ev.data.ptr = socket->getIOComponent(),用来处理读写事件的IOComponentsocket 封装)
            ii. 调用epoll_ctl(_iepfd,EPOLL_CTL_ADD,socket->getSocketHandle(),&ev)注册监听socket上的读取事件;
    c. 当客户端有connect请求过来的时候会触发监听socket上的读取事件,TCPAcceptor::handleReadEvent()会被调用。

3. 接受客户端的连接请求
系统在TCPAcceptor::handleReadEvent()中接受客户端的连接请求,主要步骤如下:
    a. socket = ((ServerSocket*)_socket)->accept() 接受连接请求并得到通信socket;
    b. 创建TCPComponent封装通信socket;
    c. 调用addComponent(component, true, false) 注册当前socket的读取事件。

4. 数据通信
    A. 数据读取
         数据通信由通信socket完成,该socket在epoll中注册,当有数据需要读取的时候会触发读取事件并调用TCPComponent::handleReadEvent()处理。
    B. 数据发送
         当有数据需要发送时Connection::postPacket()函数, 这个函数中会调用_iocomponent->enableWrite(true),注册写入事件,并调用TCPComponent::handleWriteEvent()处理。

转载于:https://www.cnblogs.com/ranran/p/taobao_tongxin.html

双11怎么那么强!之二:浅析淘宝网络通信库tbnet的实现相关推荐

  1. 第12年双11|技术总指挥汤兴:淘宝确实变了

    总交易额达4982亿元. 订单创建峰值58.3万笔/秒. 这是今年双11我们创下的新纪录. 对于背后支撑的淘系技术体系来说,也是新的技术峰值. 在应对并发流量和系统稳定性上,淘系一直在和自己赛跑. 每 ...

  2. 2021淘宝天猫双11预售抢购什么时候开始及淘宝天猫双十一预售活动入口?

    2021淘宝天猫双十一是预售便宜还是淘宝天猫双11当天便宜? 非常肯定的告诉你淘宝天猫双十预售商品价格,比淘宝天猫双11当天商品价格便宜.因为淘宝天猫双11预售活动价格就是淘宝天猫双11当天活动价格, ...

  3. 网购到火车票 浅析淘宝和12306网站架构

    12306火车票购票系统,逢假日必瘫痪,引发了强烈反响.国庆前后,"问诊12306"的时候,铁道系统的答复是,购票人数太多,数据量过大.但 是,在前不久淘宝双11大促活动中,淘宝双 ...

  4. 互联网日报 | 爱奇艺会员宣布11月13日起涨价;淘宝特价版月活用户破7000万;我国成功发射一箭十三星...

    今日看点 ✦ 华为去年为欧洲贡献164亿欧元GDP,支撑超22万个工作岗位 ✦ 爱奇艺宣布11月13日起调整会员定价:黄金VIP系列最新定价19元至248元 ✦ 阿里巴巴:淘宝特价版月活跃用户在9月超 ...

  5. 浅析淘宝刷单--我们如何网购

    淘宝刷单指淘宝店铺为了获得单品或者店铺在淘宝搜索中获得较好的排名而采取的作弊行为,可以看成一种建立在欺骗基础之上的营销行为,虽然这种行为被淘宝明令禁止,但刷单方式却层出不穷.本文将从如下几个方面解析淘 ...

  6. 排名算法(二)--淘宝搜索排序算法分析

    原文:https://blog.csdn.net/u011966339/article/details/78052569 淘宝搜索排序的目的是帮助用户快速的找到需要的商品.从技术上来说,就是在用户输入 ...

  7. [转]浅析淘宝数据魔方技术架构

    为什么80%的码农都做不了架构师?>>>    为此,我们进行了一系列数据产品的研发,比如为大家所熟知的量子统计.数据魔方和淘宝指数等.尽管从业务层面来讲,数据产品的研发难度并不高; ...

  8. 第12个双11,天猫的“造新”运动

    文 | 易牟 来源 | 螳螂财经(ID:TanglangFin) "今年的双11,直播怎么这么火?" 又到了一年一度的双11,女朋友的灵魂发问又开始了,吐槽归吐槽,购物车一点点被塞 ...

  9. 双11“静悄悄”,折腾14年终于卷不动了?

    双11购物节已经陪我们走过了14个年头,不同于往年春晚般热闹的"过节"气氛,今年并没有盛大的双11晚会和数字大屏滚动的成交数据. 相比往年,今年这个双11似乎要安静很多! 而每年大 ...

最新文章

  1. php getconfig,PHP: tidy::getConfig - Manual
  2. MySQL优化篇:执行计划explain中key_len计算方式
  3. Linux C 数据结构---单向链表
  4. Python读取文件中汉字方法:导入codecs,添加encoding='utf-8'
  5. [开发笔记]-获取歌曲ID3信息
  6. C#中的底层音频控制播放
  7. 【java读书笔记】——java开篇宏观把控 + HelloWorld
  8. css就近原则_CSS 三大特性
  9. 最大流模板(Edmonds-Karp)
  10. inDesign教程,如何创建交互式简历?
  11. 掌握c语言的运行环境,c语言考试大纲
  12. greenDao的使用教程
  13. 基于树莓派的语音对话助手 百度机器人 适合入门
  14. Python3-pandas
  15. HDU_1709 The Balence (生成函数)
  16. 19、控件使用之图标旋转指示仪表盘显示
  17. CTF学习笔记——Easy Calc
  18. Tomcat的访问及修改端口号
  19. 中国流量排名前一百名网站
  20. 游戏策划学习:胧村正、百闻牌

热门文章

  1. fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法
  2. zipfile不能解压分卷压缩的文件
  3. Linux云服务ModuleNotFoundError: No module named 'MySQLdb'
  4. linux关闭防火墙命令firewall
  5. C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙
  6. 三插头内部结构图_三方面维护硬度计才能使寿命更长久
  7. matlab小波三维图,matlab小波包变换估计时变功率谱三维图出图和理想不一样
  8. Windows 下,使用 Pycharm + Anaconda(NumPy,SciPy 等集成包)的环境配置
  9. MFC复选框CheckBox使用
  10. 分子生物学之蛋白质与氨基酸