| 企服解答
RPC可以基于TCP協(xié)議也可以基于HTTP協(xié)議。
rpc基于什么協(xié)議
1、基于TCP協(xié)議的RPC調(diào)用
在Java中,可以利用Socket API實(shí)現(xiàn)基于TCP協(xié)議的RPC調(diào)用,由服務(wù)的調(diào)用方與服務(wù)的提供方建立Socket連接,并由服務(wù)的調(diào)用方通過Socket將需要調(diào)用的接口名稱、方法名稱和參數(shù)序列化后傳遞給服務(wù)的提供方,服務(wù)的提供方反序列化后再利用反射調(diào)用相關(guān)的方法,最后將結(jié)果返回給服務(wù)的調(diào)用方。
整個(gè)基于TCP協(xié)議的PRC調(diào)用大致如此,但是在實(shí)例應(yīng)用中則會(huì)進(jìn)行一系列的封裝,譬如RMI便是在TCP協(xié)議上傳遞可序列化的java對象。
2、基于HTTP協(xié)議的RPC調(diào)用
基于HTTP協(xié)議的RPC調(diào)用則更像是我們訪問網(wǎng)頁一樣,只是它的返回結(jié)果更加單一簡單。
其大致流程為:由服務(wù)的調(diào)用者向服務(wù)的提供者發(fā)送請求,這種請求的方式可能是GET、POST、PUT、DELETE等中的一種(服務(wù)的提供者可能會(huì)根據(jù)不同的請求方式做出不同的處理,或者某個(gè)方法只允許某種請求方式),而調(diào)用的具體方法則根據(jù)URL進(jìn)行方法調(diào)用,而方法所需參數(shù)則可能是對服務(wù)調(diào)用方傳輸過去的XML數(shù)據(jù)或JSON數(shù)據(jù)解析后的結(jié)果,最后返回JOSN或XML的數(shù)據(jù)結(jié)果(這需要根據(jù)實(shí)際應(yīng)用定義相關(guān)的協(xié)議)。
由于目前有很多開源的WEB服務(wù)器,如Tomcat,JBoss等,所以其實(shí)現(xiàn)起來更加容易(就跟做Web項(xiàng)目一樣)。
| 擴(kuò)展閱讀
RPC(Remote Procedure Call Protocol),指遠(yuǎn)程過程調(diào)用,一般用來實(shí)現(xiàn)部署在不同機(jī)器上的系統(tǒng)之間的方法調(diào)用,使得程序能夠像訪問本地系統(tǒng)資源一樣,通過網(wǎng)絡(luò)傳輸去訪問遠(yuǎn)端系統(tǒng)資源。
它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的思想。RPC 是一種技術(shù)思想而非一種規(guī)范或協(xié)議。
RPC協(xié)議與HTTP協(xié)議的區(qū)別:
1、RPC是一種API,HTTP是一種無狀態(tài)的網(wǎng)絡(luò)協(xié)議。RPC可以基于HTTP協(xié)議實(shí)現(xiàn),也可以直接在TCP協(xié)議上實(shí)現(xiàn)。
2、RPC主要是用在大型網(wǎng)站里面,因?yàn)榇笮途W(wǎng)站里面系統(tǒng)繁多,業(yè)務(wù)線復(fù)雜,而且效率優(yōu)勢非常重要的一塊,這個(gè)時(shí)候RPC的優(yōu)勢就比較明顯了。
HTTP主要是用在中小型企業(yè)里面,業(yè)務(wù)線沒那么繁多的情況下。
3、HTTP開發(fā)方便簡單、直接。開發(fā)一個(gè)完善的RPC框架難度比較大。
4、HTTP發(fā)明的初衷是為了傳送超文本的資源,協(xié)議設(shè)計(jì)的比較復(fù)雜,參數(shù)傳遞的方式效率也不高。開源的RPC框架針對遠(yuǎn)程調(diào)用協(xié)議上的效率會(huì)比HTTP快很多。
5、HTTP需要事先通知,修改Nginx/HAProxy配置。RPC能做到自動(dòng)通知,不影響上游。
6、HTTP大部分是通過Json來實(shí)現(xiàn)的,字節(jié)大小和序列化耗時(shí)都比Thrift要更消耗性能。RPC,可以基于Thrift實(shí)現(xiàn)高效的二進(jìn)制傳輸。
[免責(zé)聲明]
文章標(biāo)題: rpc基于什么協(xié)議
文章內(nèi)容為網(wǎng)站編輯整理發(fā)布,僅供學(xué)習(xí)與參考,不代表本網(wǎng)站贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)溝通。發(fā)送郵件至36dianping@36kr.com,我們會(huì)在3個(gè)工作日內(nèi)處理。