從RPC到HTTP:網(wǎng)絡通信協(xié)議的演變
前言
隨著信息技術的飛速發(fā)展,網(wǎng)絡通信協(xié)議在構建分布式系統(tǒng)和應用程序中發(fā)揮著至關重要的作用。從早期的遠程過程調(diào)用(RPC)到現(xiàn)代的超文本傳輸協(xié)議(HTTP),網(wǎng)絡通信協(xié)議經(jīng)歷了顯著的演變。
在剛開始C/S架構流行時,對于C/S架構下的軟件,如聊天軟件、辦公軟件等,它們只需要與自己公司的服務器通信,所以可以使用自家定制的RPC協(xié)議進行遠程調(diào)用即可。但隨著萬維網(wǎng)與B/S架構的出現(xiàn),瀏覽器產(chǎn)生了,而瀏覽器需要訪問來自不同公司的很多網(wǎng)站,這不能通過RPC進行訪問,所以需要一個統(tǒng)一的標準來與這些網(wǎng)站服務器通信。
這時HTTP協(xié)議發(fā)揮作用的地方,HTTP為B/S架構(瀏覽器/服務器架構)提供了一個統(tǒng)一的標準,讓不同網(wǎng)站的服務器能夠與瀏覽器交互,HTTP也是RPC的一種實現(xiàn)方式。
圖片
建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket ,套接字之間的連接過程分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。
圖片
在Web應用中,瀏覽器請求一個URL,服務器就把生成的HTML網(wǎng)頁發(fā)送給瀏覽器,而瀏覽器和服務器之間的傳輸協(xié)議是HTTP。
介紹
圖片
RPC
RPC(Remote Procedure Call:遠程過程調(diào)用):是一種進程間通信方式,是一種技術的思想,而不是規(guī)范。它允許程序調(diào)用另一個地址空間(通常是共享網(wǎng)絡的另一臺機器上)的過程或函數(shù),而不用程序員顯式編碼這個遠程調(diào)用的細節(jié)。即程序員無論是調(diào)用本地的還是遠程的函數(shù),本質(zhì)上編寫的調(diào)用代碼基本相同。
RPC基于TCP協(xié)議,客服端與服務端需要進行三次握手完成可靠連接,第四步進行數(shù)據(jù)傳輸。因為TCP是數(shù)據(jù)傳輸層,傳輸協(xié)議需要服務器統(tǒng)一編寫,進行二進制傳輸,依賴序列化和反序列化規(guī)則,對于大部分應用需要靈活變動數(shù)據(jù)則不適用,RPC常用于Socket連接或一些基本不變動的傳輸格式數(shù)據(jù),減少數(shù)據(jù)變動帶來的開發(fā)成本。
比如說現(xiàn)在有兩臺服務器A和B,一個應用部署在A服務器上,另一個應用部署在B服務器上,如果A應用想要調(diào)用B應用提供的方法,由于他們不在一臺機器下,也就是說它們不在一個JVM內(nèi)存空間中,是無法直接調(diào)用的,需要通過網(wǎng)絡進行調(diào)用,那這個調(diào)用過程就叫做RPC。
- 由于HTTP在應用層中完成,整個通信的代價較高,遠程過程調(diào)用中直接基于TCP進行遠程調(diào)用,數(shù)據(jù)傳輸在傳輸層TCP層完成,更適合對效率要求比較高的場景,RPC主要依賴于客戶端和服務端之間建立Socket鏈接進行,底層實現(xiàn)比REST更復雜。
- 無論是何種類型的數(shù)據(jù),最終都需要序列化轉(zhuǎn)換成二進制流在網(wǎng)絡上進行傳輸,數(shù)據(jù)的發(fā)送方需要將對象序列化轉(zhuǎn)換為二進制流,而數(shù)據(jù)的接收方則需要把二進制流反序列化為對象.
HTTP
HTTP(Hypertext Transfer Protocol:超文本傳輸協(xié)議):是互聯(lián)網(wǎng)上應用最為廣泛的一種應用層協(xié)議,主要用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應用,如萬維網(wǎng)(WWW),客戶端發(fā)起請求,服務器處理請求并返回響應,通常用于web瀏覽器和web服務器間的通信,HTTP定義了請求報文和響應報文的結(jié)構以及不同的請求方法(GET, POST等)
圖片
補充
HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)
圖片
gRPC是Google發(fā)布的基于HTTP 2.0傳輸層協(xié)議承載的高性能開源軟件框架,提供了支持多種編程語言的、對網(wǎng)絡設備進行配置和納管的方法。
圖片