天天看點

應用層協定設計

應用協定概述

應用層協定設計
  • 在對外提供網絡服務時,服務端和用戶端需要遵循同一套資料 通訊協定
  • 每個系統不一樣,提供的服務也不一樣,是以每個系統都要有 自己的應用協定
  • 流式傳輸解決粘包和半包問題

一個協定設計案例

應用層協定設計

具體的代碼

應用層協定設計
應用層協定設計
應用層協定設計

協定設計的種類

二進制協定

比如網絡通信運輸層中的tcp協定,rtsp,rtmp,rtp。

明文的文本協定

比如應用層的http、redis協定。

混合協定(二進制+明文)

很多企業産品都采用這個。

固定邊界協定

能夠明确得知一個協定封包的長度,這樣的協定易于解析,比如tcp協定。

模糊邊界協定

無法明确得知一個協定封包的長度,這樣的協定解析較為複雜,通常需要通過某些 特定的位元組來界定封包是否結束,比如http協定。

應用層協定設計
應用層協定設計
應用層協定設計

​​https://cloud.tencent.com/developer/article/1038381​​

redis協定

https://xargin.com/redis-protocal/

應用層協定設計

協定設計的注意事項

大小端

應用層協定設計

位元組對齊

任何變量,不管是堆變量還是棧變量都對應着作業系統中的一塊記憶體,由于記憶體對齊的要求程式中

的變量并不是緊湊存儲的,例如一個c語言的結構體Test在記憶體中的布局可能如下圖所示。

struct Test
{
char a; char b; int32_t c;
};      
應用層協定設計

結構體操作的變量便宜

應用層協定設計

協定設計的優劣評判

Netyy中的實作

高效的

快速的打包解包減少對cpu的占用,高資料壓縮率降低對網絡帶寬的占用。

簡單的

易于人的了解、程式的解析。

易于擴充的

對可預知的變更,有足夠的彈性用于擴充。

容易相容的

• 向前相容,對于舊協定發出的封包,能使用新協定進行解析,隻是新協定支援的新功能不能使用。

• 向後相容,對于新協定發出的封包,能使用舊協定進行解析,隻是新協定支援的新功能不能使用。

架構師體系

應用層協定設計

繼續閱讀