如何利用 Netty 實現自定義協議通訊?

InvQ發表於2020-11-11

既然是網路程式設計,自然離不開通訊協議,應用層之間通訊需要實現各種各樣的網路協議。在專案開發的過程中,我們就需要去構建滿足自己業務場景的應用層協議。之前我們介紹瞭如何使用網路協議解決 TCP 拆包/粘包的底層問題,這次我們將在此基礎上繼續討論如何設計一個高效、可擴充套件、易維護的自定義通訊協議,以及如何使用 Netty 實現自定義通訊協議。

通訊協議設計

所謂協議,就是通訊雙方事先商量好的介面暗語,在 TCP 網路程式設計中,傳送方和接收方的資料包格式都是二進位制,傳送方將物件轉化成二進位制流傳送給接收方,接收方獲得二進位制資料後需要知道如何解析成物件,所以協議是雙方能夠正常通訊的基礎。

目前市面上已經有不少通用的協議,例如 HTTP、HTTPS、JSON-RPC、FTP、IMAP、Protobuf 等。通用協議相容性好,易於維護,各種異構系統之間可以實現無縫對接。如果在滿足業務場景以及效能需求的前提下,推薦採用通用協議的方案。相比通用協議,自定義協議主要有以下優點。

  • 極致效能:通用的通訊協議考慮了很多相容性的因素,必然在效能方面有所損失。

  • 擴充套件性:自定義的協議相比通用協議更好擴充套件,可以更好地滿足自己的業務需求。

  • 安全性:通用協議是公開的,很多漏洞已經很多被黑客攻破。自定義協議更加安全,因為黑客需要先破解你的協議內容

那麼如何設計自定義的通訊協議呢?這個答案見仁見智,但是設計通訊協議有經驗方法可循。結合實戰經驗我們一起看下一個完備的網路協議需要具備哪些基本要素。

1. 魔數

相關文章