天天看點

二進制協定 vs 文本協定

二進制協定 vs 文本協定

在伺服器程式開發過程中,各個服務直接需要進行互動。這樣就需要定義消息的協定,一般來說協定主要包括二進制協定和文本協定,下面就我在工作中用到的兩種協定說說自己的看法。

目前在公司做伺服器背景開發的工作,需要多個服務程式進行互動。因為是TCP直連,是以直接采用二進制消息的方式。消息的定義統一采用消息頭(消息ID+消息長度)+x消息體(消息内容)的方式,是以擴充是比較友善的。用代碼表示如下

二進制協定有以下幾個優點:

二進制協定隻儲存了必須的資訊,在需要傳遞大量資訊的時候,對于帶寬的節省是非常明顯的。

二進制協定很友善使用異或 或者壓縮的方式進行加密,防止協定被破解,進而保護了傳遞的資訊,增加協定破解的難度。

二進制協定的缺點也非常明顯:

對于每一條消息,因為無法自解釋,是以對于每一條消息都必須要有對應的文檔進行說明。文檔和代碼的一緻性就顯得很重要了。

因為是嚴格的記憶體到對象的轉換,是以要求發送方與接收方的的機器位元組序保持一緻,否則無法正确解析。

對于消息的擴充是比較友善的,不過也隻能在消息的後面添加字段,才能做到相容。如果修改已有字段的順序就會造成消息無法正确解析。

在http請求中,一般會采用json或者xml形式的協定。特别是對于web端的前背景互動更多的會采用json。

用代碼表示一般如下:

文本協定有以下優點:

如果需要增加一些條件,直接添加Key和Value就可以了,擴充友善。

如果原有的消息需要更新,可以在回複裡直接給出更新後請求的位址和消息格式。

對于消息的發送方和接收方的采用的程式設計語言沒有嚴格的限制,對于多語言編寫提供了便利。

文本協定的有以下缺點。

因為文本協定傳遞了太多的不會在進行中實際使用的内容,是以在如果處理的請求的量非常大的話,對于帶寬的浪費很嚴重。

因為文本協定友善解讀,是以如果不希望跟其他的程式共享通信協定,就最好不要采用文本協定。

尺有所短,寸有所長。每種協定都有自己适用場景。

對于公司内部的服務程式之間進行通信,采用二進制協定好一些。

對于需要提供給外部的接口,提供文本格式的協定更好。