日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TDEngine数据包的详细说明

發布時間:2024/1/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TDEngine数据包的详细说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NetMsg為TDEngine傳輸數據的數據結構

數據組成

包頭

數據的前12位為包頭

前4位為數據包的長度,供數據讀取的時候獲取讀取的長度

接下來2位為seq_fd,客戶端與網關服通訊時會保證包序是正常的,即下一個包的seq是符合標準的,防止作弊重復發送包,在網關服與邏輯服通訊時seq_fd表示網關服接受客戶端的fd值。邏輯服根據seq_fd值來獲取用數據包的來源用戶。

其它字段為預留字段,后續可能有加密字段

包數據

包數據的第一個元素存儲的是一個str的值,也就是數據包的名稱,可根據數據包的名稱獲取有幾個參數,參數的類型為何種類型,用以數據驗證。

接下來為若干個數據值,數據為小端結構

數據值解析

讀取字段

首先讀取字段頭,字段頭為兩個16進制的值,第一個16進制為index,第二個16進制對應類型的pattern

若為map類型的數據,第一個index用來解析對應的key的字符串值,對于其它類型index固定為0,不作解析

第二個pattern類型則表示下一個值的數據類型,程序會根據pattern值進行下一步值的解析

類型解析

若類型為u8,i8,則會讀取后面1個字節做為值

若類型為u16,i16,則會讀取后面2個字節做為值

若類型為u32,i32,則會讀取后面4個字節做為值

若類型為float,則會讀取后面4個字節做為i32值,然后把這個值除以1000得出float的值,float沒有用內存直接做轉換,只保留了3位的精度,若精度要求高的請勿使用此類型,可在打包的時候轉成字符串,解析的時候做相應的解析

若類型為str,raw,則后面2個字節為字符串的長度,再根據長度讀取相應的字節做為字符串的值

若類型為map

  • 遍歷字段頭,若頭為nil類型,則表示讀完map,退出循環,跳到5
  • 根據字段頭,讀取相應的類型
  • 根據字段頭的index,從配置中讀取相應的key,若配置中不存在key,則繼續執行1
  • 把key和相應的值存到HashMap,繼續執行1
  • 數據成功讀取
  • 若類型為數組類型

  • 得出對應的子類型,如u8[]對應的子類型為u8
  • 遍歷讀取字段的值,若讀取到的類型為None,退出循環,跳到4
  • 把讀取到的值存在Vector,繼續執行1
  • 數據成功讀取
  • 至此,數據解析完成

    項目地址

    TDEngine

    td_proto rust 實現

    td_proto cpp 實現

    轉載于:https://my.oschina.net/tickbh/blog/681079

    總結

    以上是生活随笔為你收集整理的TDEngine数据包的详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。