cat 数据接收 TcpSocketReceiver
该类中startServer(port)方法用于启动netty,设置消息解码器MessageDecoder和消息编码器ClientMessageEncoder
消息传输使用消息header+消息body格式,解码器中消息前4个字节即int类型用于存储消息body的长度,当消息可读长度
大于等于消息头所读长度时,读取整个消息,调用CodecHandler类中的静态方法decode进行解析,该方法先读取消息body
的前3个字节并转成String,如果是"PT1"则调用PlainTextMessageCodec类进行解析,如果是"NT1"则调用NativeMessageCodec
类进行解析,否则抛出异常.解析成功之后返回 MessageTree 接口类型的实现类.
默认系统有两个实现类DefaultMessageTree和NullMessageTree

PlainTextMessageCodec 的解析过程
PlainTextMessageCodec实现MessageCodec接口,public decode方法首选调用ByteBuf的readInt()目的向后移动4字节,
readIndex指向消息body开头部分,并创建DefaultMessageTree对象,调用private方法decode继续解析,
该方法通过成员属性ThreadLocal对象尝试获取Context对象,Context类有两个成员对象一个是ByteBuf,一个是char[],
ByteBuf用于存放消息body,可以通过动态赋值,并在decode方法退出前被移除,而char[]只能在对象创建时初始化为1MB,充当缓存使用,如果未获取到则创建,保证每个NIOEventLoop线程上只有一个Context对象.decode方法中调用decodeHeader方法解析一些基本数据例如id,domain,hostname等等,然后判断消息体时候后剩余数据,有则调用decodeMessage方法解析

PlainTextMessageCodec类中decodeHeader(ctx, tree)方法解析过程
decodeHander方法通过调用成员属性BufferHelper对象解析,该方法需要传入Context对象和数据流分隔符,
从源码可以看出,cat中将一些换行符使用2字节得文本替换,因此在未找到分隔符之前
遍历读取每个byte,并替换2字节换行符文本为1字节换行符,一旦找到则停止读取,并将读取得byte转为字符串
数据流得读取会一定readIndex,但是decodeHeader方法却多次调用该方法解析id,domain,hostname等等,因为
可以推断cat客户端数据在推送到服务端时,一定是按照该顺序传入的字节流.

未完待续...

大众点评分布式系统监控开源框架cat源码阅读(个人笔记)相关推荐

  1. 小米开源框架MACE 源码阅读笔记 1

    转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...

  2. 小米开源框架MACE 源码阅读笔记

    转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...

  3. 小米开源框架MACE - 源码阅读笔记一

    首先先一目了然看一下其目录结构(这些个源码可以在github上下载到,只要在GitHub搜索mace即可): 介绍 MACE(Mobile AI Compute Engine)是一个针对移动异构计算平 ...

  4. php微框架 flight源码阅读

    Flight(https://github.com/mikecao/fl... 是一个可扩展的PHP微框架,快速.简单,能够快速轻松地构建RESTful web应用程序,在github上有2k sta ...

  5. NJ4X源码阅读分析笔记系列(一)——项目整体分析

    NJ4X源码阅读分析笔记系列(一)--项目整体分析 NJ4X是什么 参见NJ4X的官网:http://www.nj4x.com/ Java and .Net interfaces to support ...

  6. NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析

    NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...

  7. android tcp socket框架_最流行的 Web 框架 Gin 源码阅读

    最近公司大部分项目开始往golang换, api的框架选定使用gin, 于是将 gin的源码看了一遍, 会用几篇文章将gin的流程及流程做一个梳理, 下面进入正题. gin框架预览 上图大概是 gin ...

  8. 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践

    大家应该都接手过这种项目,前人找一个开源软件改一改,发上线. 我这里便曾经遇到过类似的问题. 随着需求的增加,各种维护人员东改改西改改,原来的开源项目被改的面目全非,再也无法和上游合并. 甚至TLS协 ...

  9. python量化回测框架_股票量化交易回测框架pyalgotrade源码阅读(一)

    PyAlgoTrade是什么呢? 一个股票量化交易的策略回测框架. 而作者的说明如下. To make it easy to backtest stock trading strategies. 简单 ...

最新文章

  1. 多媒体指令(灰度像素最大值)
  2. 一帖搞定U盘系统制作及安装苹果mac os引导U盘安装windows7
  3. 使用OpenCV-Python的函数minMaxLoc()应该注意的两点
  4. 万用表怎么测量电池容量_如何使用万用表,使用万用表测量常用的六个方面
  5. 首付贷换了马甲,又重现江湖了
  6. 前端学习(1317):静态资源2
  7. 没串口怎么操作核心板的Linux?ADB(以点灯为例)
  8. Codeforces Round #198 (Div. 2)A,B题解
  9. www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程
  10. linux下led灯驱动程序
  11. B. DZY Loves Modification
  12. 写给音响工程师的科普文章(一)——从模电角度去了解调音台的信号流程
  13. php连接mysql 实现登录_php如何连接mysql实现简单注册登陆页面
  14. Mac Sublime Text设置中文
  15. Windows Server2008下安装JDK
  16. GDC2013 Horizon and Beyond A Look into Tomb Raider's Tools
  17. 切图常说的@1X@2X@3X是什么意思?
  18. CS客户端渗透测试(二)信息收集与流量分析
  19. B站收藏 6.1w+!GitHub 标星 3.9k+!这门神课拯救了我薄弱的计算机基础
  20. echarts饼图label文字颜色

热门文章

  1. java quartz 是干什么的_Quartz可以用来做什么
  2. 从十亿光年到0.1飞米
  3. c语言教程+school,C语言教程方法用法 _C语言-w3school教程
  4. PyDraw 所见即所得的 Python GUI 绘制框架 开源代码源自 JY Lin
  5. 基于CPLD的主板上电时序控制--状态机方式
  6. iso映像_如何在Windows 7中刻录ISO映像
  7. IPTV与DTV:竞争还是共存?
  8. brendan eich_编程领域的变革者:Brendan Eich
  9. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
  10. SpringCloud-06-Hystrix断路器