應(yīng)用協(xié)議概述
- 在對外提供網(wǎng)絡(luò)服務(wù)時,服務(wù)端和客戶端需要遵循同一套數(shù)據(jù) 通訊協(xié)議
- 每個系統(tǒng)不一樣,提供的服務(wù)也不一樣,因此每個系統(tǒng)都要有 自己的應(yīng)用協(xié)議
- 流式傳輸解決粘包和半包問題
一個協(xié)議設(shè)計案例
具體的代碼
協(xié)議設(shè)計的種類
二進制協(xié)議
比如網(wǎng)絡(luò)通信運輸層中的tcp協(xié)議,rtsp,rtmp,rtp。
明文的文本協(xié)議
比如應(yīng)用層的http、redis協(xié)議。
混合協(xié)議(二進制+明文)
很多企業(yè)產(chǎn)品都采用這個。
固定邊界協(xié)議
能夠明確得知一個協(xié)議報文的長度,這樣的協(xié)議易于解析,比如tcp協(xié)議。
模糊邊界協(xié)議
無法明確得知一個協(xié)議報文的長度,這樣的協(xié)議解析較為復(fù)雜,通常需要通過某些 特定的字節(jié)來界定報文是否結(jié)束,比如http協(xié)議。
??https://cloud.tencent.com/developer/article/1038381??
redis協(xié)議
https://xargin.com/redis-protocal/
協(xié)議設(shè)計的注意事項
大小端
字節(jié)對齊
任何變量,不管是堆變量還是棧變量都對應(yīng)著操作系統(tǒng)中的一塊內(nèi)存,由于內(nèi)存對齊的要求程序中
的變量并不是緊湊存儲的,例如一個c語言的結(jié)構(gòu)體Test在內(nèi)存中的布局可能如下圖所示。
struct Test
{
char a; char b; int32_t c;
};
結(jié)構(gòu)體操作的變量便宜
協(xié)議設(shè)計的優(yōu)劣評判
Netyy中的實現(xiàn)
高效的
快速的打包解包減少對cpu的占用,高數(shù)據(jù)壓縮率降低對網(wǎng)絡(luò)帶寬的占用。
簡單的
易于人的理解、程序的解析。
易于擴展的
對可預(yù)知的變更,有足夠的彈性用于擴展。
容易兼容的
? 向前兼容,對于舊協(xié)議發(fā)出的報文,能使用新協(xié)議進行解析,只是新協(xié)議支持的新功能不能使用。
? 向后兼容,對于新協(xié)議發(fā)出的報文,能使用舊協(xié)議進行解析,只是新協(xié)議支持的新功能不能使用。
架構(gòu)師體系
????
本文摘自 :https://blog.51cto.com/u