Kitex 傳輸協(xié)議

2022-04-27 10:47 更新

傳輸協(xié)議

參考 Thrift THeader 協(xié)議 ,我們?cè)O(shè)計(jì)了 TTheader 協(xié)議。

協(xié)議編碼 

 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f
+----------------------------------------------------------------+
| 0|                          LENGTH                             |
+----------------------------------------------------------------+
| 0|       HEADER MAGIC          |            FLAGS              |
+----------------------------------------------------------------+
|                         SEQUENCE NUMBER                        |
+----------------------------------------------------------------+
| 0|     HEADER SIZE        | ...
+---------------------------------

                  Header is of variable size:

                   (and starts at offset 14)

+----------------------------------------------------------------+
| PROTOCOL ID  |NUM TRANSFORMS . |TRANSFORM 0 ID (uint8)| 
+----------------------------------------------------------------+
|  TRANSFORM 0 DATA ...
+----------------------------------------------------------------+
|         ...                              ...                   |
+----------------------------------------------------------------+
| INFO 0 ID (uint8)|       INFO 0  DATA ...
+----------------------------------------------------------------+
|         ...                              ...                   |
+----------------------------------------------------------------+
|                                                                |
|                              PAYLOAD                           |
|                                                                |
+----------------------------------------------------------------+

其中:

  1. LENGTH 字段 32bits,包括數(shù)據(jù)包剩余部分的字節(jié)大小,不包含 LENGTH 自身長(zhǎng)度
  2. HEADER MAGIC 字段 16bits,值為:0x1000,用于標(biāo)識(shí) TTHeaderTransport
  3. FLAGS 字段 16bits,為預(yù)留字段,暫未使用,默認(rèn)值為 0x0000
  4. SEQUENCE NUMBER 字段 32bits,表示數(shù)據(jù)包的 seqId,可用于多路復(fù)用,最好確保單個(gè)連接內(nèi)遞增
  5. HEADER SIZE 字段 16bits,等于頭部長(zhǎng)度字節(jié)數(shù) /4,頭部長(zhǎng)度計(jì)算從第 14 個(gè)字節(jié)開始計(jì)算,一直到 PAYLOAD 前(備注:header 的最大長(zhǎng)度為 64K)
  6. PROTOCOL ID 字段 uint8 編碼,取值有:
    • ProtocolIDBinary = 0
    • ProtocolIDCompact = 2
  7. NUM TRANSFORMS 字段 uint8 編碼,表示 TRANSFORM 個(gè)數(shù)
  8. TRANSFORM ID 字段 uint8 編碼,具體取值參考下文
  9. INFO ID 字段 uint8 編碼,具體取值參考下文
  10. PAYLOAD 消息內(nèi)容

PADDING 填充

Header 部分長(zhǎng)度 bytes 數(shù)必須是 4 的倍數(shù),不足部分用 ?0x00? 填充

Transform IDs

表示壓縮方式,為預(yù)留字段,暫不支持,取值有:

  • ZLIB_TRANSFORM = 0x01,對(duì)應(yīng)的 data 為空,表示用 ?zlib ?壓縮數(shù)據(jù);
  • SNAPPY_TRANSFORM = 0x03,對(duì)應(yīng)的 data 為空,表示用 ?snappy ?壓縮數(shù)據(jù);

Info IDs

用于傳遞一些 kv 對(duì)信息,取值有:

  • INFO_KEYVALUE = 0x01,對(duì)應(yīng)的 data 為 key/value 對(duì),key 和 value 各自都是由 uint16 的長(zhǎng)度加上 no-trailing-null 的字符串組成,一般用于傳遞一些常見的 meta 信息,例如 tracingId;
  • INFO_INTKEYVALUE = 0x10,對(duì)應(yīng)的 data 為 key/value 對(duì),key 為 uint16,value 由 uint16 的長(zhǎng)度加上 no-trailing-null 的字符串組成,一般用于傳遞一些內(nèi)部定制的 meta 信息,其中作為 request 有些 key 是必填的:
    • TRANSPORT_TYPE = 1(取值:framed/unframed)
    • LOG_ID = 2
    • FROM_SERVICE = 3
    • FROM_CLUSTER = 4(默認(rèn) default)
    • FROM_IDC = 5
    • TO_SERVICE = 6
    • TO_METHOD = 9
  • ACL_TOKEN_KEYVALUE = 0x11,對(duì)應(yīng)的 data 為 key/value 對(duì),key 和 value 各自都是由 uint16 的長(zhǎng)度加上 no-trailing-null 的字符串組成,用于傳遞 ACL Token;


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)