您好,登錄后才能下訂單哦!
本篇內容介紹了“Web RPC消息協議是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
消息協議的概念聽起來非常的高大上,但是消息協議到底指代的是什么,看概念是很難理解的。
消息協議是指通訊雙方傳輸的數據(消息)是如何表達描述的。
接下來我用一張圖來講講我對消息協議的理解:
在上面這張圖中客戶端是發起調用的一方,服務端是程序被調用的一方。
在服務端中提供了一個函數(方法),這個函數需要接收兩個參數(參數1,參數2),我們知道客戶端和服務端是通過網絡完成通信的,所以客戶端如何在網絡中明確自己需要調用那個函數呢?
1、客戶端需要告訴服務端,它調用的函數(方法)名,以及傳遞相應的參數,這樣服務端就明確了客戶端需求
2、服務端執行了這個方法之后,同樣將方法執行的結果返回給服務端,服務端就知道這次的調用的結果。
在這次簡單的遠端過程調用中,需要在網絡中傳遞的是調用的方法名、參數1、參數2以及方法的執行結果,而開頭說的消息協議指的就是這些需要在網絡中傳遞的數據它的表現形式/組成形式是什么樣的。
就像上面的客戶端需要將調用的方法名、參數1、參數2形成一個整體傳輸給服務端,那么它如何將他們形成一個整體呢?
這里就需要客戶端按照特定的格式將這些數據打包成一個整體,這里的特定格式指的就是消息協議。
消息協議在設計的過程中應該盡量達成以下兩個目標,并且注意三個問題。
1、性能高
將原始數據轉換為消息數據的速度快
轉換后的消息數據體積小
2、跨語言
RPC調用沒有要求調用雙方的編程語言必須相同,如果能做到跨語言調用是最好,這會方便產品開發中不同的功能服務以最合適的語言實現,然后使用 RPC 實現彼此調用。因此 RPC 調用中傳輸的消息數據應該盡量能讓跟多的語言支持。
在網絡傳輸中,一方可能連續向另一方多次發送消息,收到數據的一方如何界定數據中包含幾條消息,這便是消息邊界問題。
考慮TCP傳輸控制協議,在一條TCP鏈接中可以多次發送數據,如果發送的數據過大,就會被TCP底層實現拆解為多個數據包依次發送;而如果發送的數據過小,又可能會將幾條數據組裝成一個數據包進行發送。
為了解決消息邊界的問題,有兩種較為常用的方法:分割符法和長度聲明法。
1、分割符法
顧名思義,就是在每條消息的結尾放置一種特殊的分割符(一種常用的分割符是\r\n),表示已到達本條消息的末尾。
2、長度聲明法
長度聲明法是在消息的起始位置,用一個固定長度的整數值(通常為4字節)聲明本消息的長度,接收者先讀取出長度聲明,再按照聲明的長度讀取出相應大小的數據即可。
例如,HTTP協議同時運用了這兩種方法:
HTTP/1.0 200 OK\r\n
Server: Nginx\r\n
Content-Type: text/html; charset=utf-8\r\n
Content-Length: 5096\r\n
\r\n
# 此處為5096字節的數據
在具體消息內容的表現形式上,可以使用文本,也可以使用二進制。
1、文本
我們可以將數據轉換為具備某種格式的字符串(如 JSON),將字符串作為消息內容發送。
采用JSON這種方式,大多數編程語言都已有 JSON 轉換的工具,實現起來相對便捷。但是形成的消息數據不夠精簡,數據中有較為無意義的,如"、{、}、,、空白字符等,在網絡傳輸中會造成浪費。
2、二進制
二進制方式就是將數據在內存中的一些列原始二進制位或字節直接在網絡中傳送,而無需轉換為字符串再傳送。
如果消息數據過大,為了減輕網絡帶寬的壓力,可以考慮對消息數據進行壓縮處理。
就如同我們平時對一些文件、視頻等使用壓縮軟件進行壓縮來減小大小一樣,我們可以在構造好數據準備發送前,先用算法將數據進行壓縮處理,然后通過網絡發送到對端,對端收到數據后,先進行解壓縮處理,然后得到原體積數據后再進行解析。
即使是比文本數據小的二進制數據,我們仍然可以進行壓縮處理。
但是需要注意的是,壓縮處理是一把雙刃劍,雖然能減少數據量減輕帶寬壓力,但是同時額外增加了壓縮和解壓縮的過程,壓縮和解壓縮在處理的時候會有時間的消耗,會導致操作系統的負擔加重。有時壓縮的成本可能比減少數據量帶來的收益還高,就得不償失了。
所以是否采用壓縮處理,要根據具體情況權衡利弊。
“Web RPC消息協議是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。