0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Restful 和 RPC 是什么關(guān)系與區(qū)別

lhl545545 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 2018-02-07 15:35 ? 次閱讀

Restful 和 RPC 是什么關(guān)系

這兩個(gè)不是互斥的,HTTP是不是RPC完全取決于client的具體形式。傳統(tǒng)的RPC一般是基于二進(jìn)制協(xié)議的,client發(fā)個(gè)二進(jìn)制包過(guò)來(lái)(然后阻塞),server處理完回復(fù)一個(gè)包,client收到后醒來(lái)。在二進(jìn)制協(xié)議中一般可以在包中加個(gè)id來(lái)指明回復(fù)和請(qǐng)求的對(duì)應(yīng)關(guān)系,這樣我們就能在一個(gè)tcp連接上同時(shí)發(fā)起多個(gè)請(qǐng)求和回復(fù)。HTTP這種文本協(xié)議也可以加id,但由于一些原因(Content-Length可能缺失),即使加了id也做不到一個(gè)連接上同時(shí)傳多個(gè)HTTP消息,所以HTTP協(xié)議一般會(huì)和server保持多個(gè)連接,每個(gè)連接上同時(shí)最多只有一個(gè)HTTP消息。此種”連接池“方式即為HTTP中的”Keep-alive“。所以即使在HTTP上(或任何協(xié)議上),我們?nèi)匀豢梢宰龅礁咝У匕l(fā)送一個(gè)請(qǐng)求過(guò)去,阻塞,等待server處理完后,再醒來(lái)。這不就是RPC么。所以這兒的選擇更多是平衡功能和性能。一般來(lái)說(shuō),面向終端用戶的盡量用Restful HTTP。原因是認(rèn)知廣,直觀,編程語(yǔ)言都支持HTTP(包括shell,這樣調(diào)試起來(lái)方便),性能不是那么重要,方便用戶share鏈接。而面向內(nèi)部系統(tǒng)的話如果機(jī)器不多也可以考慮用Restful HTTP,如果機(jī)器很多還是盡量用二進(jìn)制的RPC吧,畢竟性能差距還是很大的。

 Restful 和 RPC 是什么關(guān)系與區(qū)別

restful架構(gòu)與rpc區(qū)別

RPC

RPC 即遠(yuǎn)程過(guò)程調(diào)用, 很簡(jiǎn)單的概念, 像調(diào)用本地服務(wù)(方法)一樣調(diào)用服務(wù)器的服務(wù)(方法)。

通常的實(shí)現(xiàn)有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是傳輸數(shù)據(jù)的格式。

(如果你已經(jīng)習(xí)慣于XML繁重的尖括號(hào),你不妨可以嘗試下更加輕型,高效,傳輸效率高的 JSON.)

一個(gè)簡(jiǎn)單的通信過(guò)程通常為:

Request

<?xml version=“1.0”?>

member.get_username_by_id

Response

<?xml version=“1.0”?>

Zhu Tao

向服務(wù)器發(fā)送一個(gè)過(guò)程調(diào)用的方法及其參數(shù), 得到服務(wù)器返回的方法執(zhí)行的結(jié)果。

REST

REST 不是一種協(xié)議,它是一種架構(gòu), 一種 Web Service 能夠如果滿足 REST 的幾個(gè)條件, 通常就稱這個(gè)系統(tǒng)是 Restful 的。

這里提到的條件包括:

C/S結(jié)構(gòu) (這是Internet服務(wù)的一個(gè)基本特征)

無(wú)狀態(tài) (很熟悉吧,呵呵)

可以cache (想起了瀏覽器?)

分層系統(tǒng) (想起了無(wú)數(shù)的架構(gòu)?)

統(tǒng)一的接口 (如果這是可能的,程序員有福了, :D)

code on demand(可選, 其實(shí)是一種擴(kuò)展性的要求)

看了這幾個(gè)特征后,你想起了什么?

你可能會(huì)破口而出: HTTP.

我答: You got it!

HTTP是WWW的最核心的協(xié)議, 它將簡(jiǎn)單的分布于世界各個(gè)角落的資源都統(tǒng)一起來(lái), 統(tǒng)一的地址, 簡(jiǎn)單的方法, 和一定數(shù)量的表達(dá)方式。(你可能對(duì)這三點(diǎn)描述很模糊,請(qǐng)go ahead)。

REST 的三個(gè)要素是 唯一的資源標(biāo)識(shí), 簡(jiǎn)單的方法 (此處的方法是個(gè)抽象的概念), 一定的表達(dá)方式。

REST 是以 資源 為中心, 名詞即資源的地址, 動(dòng)詞即施加于名詞上的一些有限操作, 表達(dá)是對(duì)各種資源形態(tài)的抽象。

以HTTP為例, 名詞即為URI(統(tǒng)一資源標(biāo)識(shí)), 動(dòng)詞包括POST, GET, PUT, DELETE等(還有其它不常用的2個(gè),所以 整個(gè)動(dòng)詞集合是有限的), 資源的形態(tài)(如text, html, image, pdf等)

Restful 和 RPC 是什么關(guān)系與區(qū)別

RPC與REST的區(qū)別

如果你想只記住一點(diǎn),那么就請(qǐng)記住 RPC是以動(dòng)詞為中心的, REST是以名詞為中心的, 此處的 動(dòng)詞指的是一些方法, 名詞是指資源。

你會(huì)發(fā)現(xiàn),以動(dòng)詞為中心,意味著,當(dāng)你要需要加入新功能時(shí),你必須要添加更多的動(dòng)詞, 這時(shí)候服務(wù)器端需要實(shí)現(xiàn) 相應(yīng)的動(dòng)詞(方法), 客戶端需要知道這個(gè)新的動(dòng)詞并進(jìn)行調(diào)用。

而以名詞為中心, 假使我請(qǐng)求的是 hostname/friends/, 無(wú)論這個(gè)URI對(duì)應(yīng)的服務(wù)怎么變化,客戶端是無(wú)需 關(guān)注和更新的,而這種變化對(duì)客戶端也是透明的。

至于其它的區(qū)別,如對(duì)實(shí)現(xiàn)語(yǔ)言的依賴, 耦合性等,這些都是上面提到的這個(gè)根本區(qū)別所衍生的。

讓我們回到引入部分的2個(gè)問(wèn)題。 當(dāng)你每天使用HTTP沖浪時(shí),你都在使用 REST 與遠(yuǎn)程的服務(wù)器進(jìn)行親密接觸。 當(dāng)你使用Gtalk和同事朋友溝通時(shí),你則是在享受著 RPC 的便利.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11815
  • Restful
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3655
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問(wèn)計(jì)算ADS6442的實(shí)際功耗和哪些因素有關(guān),和采樣時(shí)鐘什么關(guān)系?

    請(qǐng)問(wèn)計(jì)算ADS6442的實(shí)際功耗和哪些因素有關(guān),和采樣時(shí)鐘什么關(guān)系?如何能降低功耗呢
    發(fā)表于 02-14 06:00

    噪聲與ADC的范圍和位數(shù)是什么關(guān)系呢?怎樣選用和匹配?

    以上三者是什么關(guān)系呢?怎樣選用和匹配?ADC的動(dòng)態(tài)輸入范圍一般都有多大的?謝謝
    發(fā)表于 02-08 07:14

    TLV5613和TLC5613什么關(guān)系?

    請(qǐng)問(wèn)一下,在看TLV5613 datasheet的時(shí)候, 發(fā)現(xiàn)芯片是20腳的,為什么后面給的封裝信息都是14腳或者16腳的。 另外,TLV5613和TLC5613什么關(guān)系,我手頭有14腳的TLC5613,卻找不到相關(guān)資料。
    發(fā)表于 02-06 06:54

    請(qǐng)問(wèn)ADC的采樣速率,轉(zhuǎn)換時(shí)間,數(shù)字接口之間的讀寫(xiě)速率之間有什么關(guān)系沒(méi)有?

    請(qǐng)問(wèn)ADC的采樣速率,轉(zhuǎn)換時(shí)間,數(shù)字接口之間的讀寫(xiě)速率之間有什么關(guān)系沒(méi)有? 謝謝!
    發(fā)表于 01-23 08:17

    關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系區(qū)別

    關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)在多個(gè)方面存在顯著差異,主機(jī)推薦小編為您整理發(fā)布關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系區(qū)別,以下是它們的主要
    的頭像 發(fā)表于 01-10 09:58 ?582次閱讀

    ADS1282的SPI時(shí)鐘SCLK和芯片主時(shí)鐘MCLK有什么關(guān)系嗎?

    ADS1282的SPI時(shí)鐘SCLK和芯片主時(shí)鐘MCLK有什么關(guān)系嗎? SCLK頻率太高會(huì)不會(huì)影響ADS1282配置或讀數(shù)失???
    發(fā)表于 01-01 08:34

    請(qǐng)問(wèn)ADC的采樣率和提供的工作頻率是什么關(guān)系?

    請(qǐng)問(wèn)ADC的采樣率和提供的工作頻率是什么關(guān)系?奈奎斯特采樣定理是不是指的采樣頻率?
    發(fā)表于 12-06 06:13

    ADS7869輸入電壓與轉(zhuǎn)換數(shù)據(jù)之間是什么關(guān)系

    ADS7869輸入電壓與轉(zhuǎn)換數(shù)據(jù)之間是什么關(guān)系,芯片手冊(cè)上沒(méi)有寫(xiě),是輸入電壓0V對(duì)應(yīng)輸出2048嗎?輸入達(dá)到電壓參考值,輸出是4095?輸入是負(fù)的電壓參考值,輸出是0嗎?
    發(fā)表于 11-27 07:05

    TLV320AIC3254內(nèi)部中的ADC處理模塊和minidsp到底是什么關(guān)系

    我想請(qǐng)問(wèn)一下幾個(gè)問(wèn)題: 1.3254內(nèi)部中的ADC處理模塊和minidsp到底是什么關(guān)系,是并列的還是串行關(guān)系?還是ADC處理模塊就是minidsp特殊情況下的部分? 2.minidsp的抽取因子該怎么理解,到底怎么使用?
    發(fā)表于 10-31 06:02

    鉗位能力與電流和負(fù)載具體是什么關(guān)系,應(yīng)該怎么考慮?

    記得錢(qián)一段時(shí)間請(qǐng)教過(guò)這個(gè)電路,但是一直也沒(méi)弄明白。我想知道鉗位能力與電流和負(fù)載具體是什么關(guān)系,應(yīng)該怎么考慮?為什么要用一個(gè)強(qiáng)的源?負(fù)載重是啥意思,電流消耗大?在實(shí)際應(yīng)用中使用電源芯片,輸出端也常被負(fù)載拉低,這樣說(shuō)是不是也是鉗位能力不行?鉗位能力怎么理解呢?求教,或者推薦一些資料我自己學(xué),謝謝您了
    發(fā)表于 09-23 08:27

    運(yùn)放的失真度和總諧波失真有什么關(guān)系,單位都是什么?

    運(yùn)放的失真度和總諧波失真有什么關(guān)系,單位都是什么?怎么換算?
    發(fā)表于 09-19 08:25

    Dubbo源碼淺析(一)—RPC框架與Dubbo

    時(shí),就像調(diào)用本地過(guò)程一樣方便。 1.2 RPC與Http的關(guān)系 用一句話來(lái)總結(jié)就是: RPC是一種概念,http是一種協(xié)議,可以認(rèn)
    的頭像 發(fā)表于 08-16 15:18 ?1110次閱讀
    Dubbo源碼淺析(一)—<b class='flag-5'>RPC</b>框架與Dubbo

    圖像處理器與計(jì)算機(jī)視覺(jué)有什么關(guān)系區(qū)別

    圖像處理器與計(jì)算機(jī)視覺(jué)是兩個(gè)在圖像處理領(lǐng)域緊密相連但又有所區(qū)別的概念。它們之間的關(guān)系區(qū)別可以從多個(gè)維度進(jìn)行探討。
    的頭像 發(fā)表于 08-14 09:36 ?975次閱讀

    TSMaster RPC 基礎(chǔ)入門(mén):編程指導(dǎo)和使用說(shuō)明

    介紹RPC模塊前,我們先淺聊一下RPC的相關(guān)說(shuō)明,以及在什么樣的情況下需要了解本文。1.RPC說(shuō)明遠(yuǎn)程過(guò)程調(diào)用(RPC,RemoteProcedureCall)是一種網(wǎng)絡(luò)通信協(xié)議,使得
    的頭像 發(fā)表于 07-13 08:21 ?1285次閱讀
    TSMaster <b class='flag-5'>RPC</b> 基礎(chǔ)入門(mén):編程指導(dǎo)和使用說(shuō)明

    鴻蒙開(kāi)發(fā)通信與連接:ohos.rpc RPC通信

    本模塊提供進(jìn)程間通信能力,包括設(shè)備內(nèi)的進(jìn)程間通信(IPC)和設(shè)備間的進(jìn)程間通信(RPC),前者基于Binder驅(qū)動(dòng),后者基于軟總線驅(qū)動(dòng)。
    的頭像 發(fā)表于 06-21 09:40 ?916次閱讀
    鴻蒙開(kāi)發(fā)通信與連接:ohos.<b class='flag-5'>rpc</b> <b class='flag-5'>RPC</b>通信

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品