如何設計可擴充套件的RPC協議

2021-10-09 04:54:10 字數 649 閱讀 6181

只有二進位制才能在網路中進行傳輸,在rpc請求傳送到網路之前,需要轉化成二進位制,然後寫入本地socket,然後通過網絡卡傳送到網路裝置中。

類似於乙個沒有標點符號的文章,我們要想識別,就必須有標點,所以協議就是給我們斷句提供依據。

為了能合適的斷句,我們可以設計乙個固定乙個長度記錄整個請求的資料大小,根據大小就可以正確的讀取。

對於提供方:他不知道這個協議體裡的二進位制資料是通過什麼方式序列化的,所以沒辦法完成反序列化操作,所以不能僅僅記錄長度這個資訊,需要將協議拆成協議頭和協議體。

定長協議存在擴充套件性問題,增加新的協議欄位的時候,如果擴充套件到協議體重,會帶來反序列化整個協議體,效能損耗較大。

所以我們可以利用可擴充套件的協議來解決這個問題

rpc裡,協議的作用就類似於斷句的符號,拆解訊息的邊界。設計協議的過程中要從長遠考慮,通過設定不固定的長度的協議頭來實現向後相容。

RPC 設計可擴充套件且向後相容的協議

協議 怎麼設計可擴充套件且向後相容的協議?瀏覽器收到命令後會封裝乙個請求,並把請求傳送到 dns 解析出來的 ip 上,通過抓包工具我們可以抓到請求的資料報,如下圖所示 協議的作用 rpc 請求在傳送到網路中之前,他需要把方法呼叫的請求引數轉成二進位制 轉成二進位制後,寫入本地 socket 中,然...

設計 C S協議 可擴充套件性

c s架構下,介面返回值定義需要考慮後續的可擴充套件性。這裡是指廣義的客戶端 服務端。原則上,對於協議的返回值,後續的變更只能新增欄位而不能發生結構性的變更 比如修改結構或刪除 否則就無法向前相容。如果非要變更,需要做好相容性處理。分兩種case 1.服務端相容,需要客戶端傳入版本號,服務端根據版本...

可擴充套件的序列化協議

oceanbase的序列化協議是一種可擴充套件的協議,其基本單元為 乙個完整的資料報是形如下面的內容 例如 1 trans id 102 1024 cid 21 other abc 接收端解析方式 cpp bool more true while more www.2cto.com 通過這種方式,可...