0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    110

    瀏覽量

    11477
  • Restful
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3518
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    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 ?273次閱讀
    Dubbo源碼淺析(一)—<b class='flag-5'>RPC</b>框架與Dubbo

    費(fèi)米氣體和超導(dǎo)是什么關(guān)系呢?費(fèi)米子的代碼讓電阻消失了?

    金屬里面自由電子構(gòu)成的特殊氣體,叫做“費(fèi)米氣體”。那么,費(fèi)米氣體和超導(dǎo)是什么關(guān)系呢?
    的頭像 發(fā)表于 04-26 10:41 ?418次閱讀
    費(fèi)米氣體和超導(dǎo)是<b class='flag-5'>什么關(guān)系</b>呢?費(fèi)米子的代碼讓電阻消失了?

    什么是元宇宙,AR/VR和它又是什么關(guān)系呢?

    最近蘋果公司的Vision pro上市預(yù)售掀起了一波潮流,元宇宙的概念又火了。那么什么是元宇宙,AR/VR和它又是什么關(guān)系呢?
    的頭像 發(fā)表于 04-22 15:14 ?1366次閱讀

    電機(jī)槽滿率和銅滿率的區(qū)別什么關(guān)系?

    電機(jī)槽滿率和銅滿率區(qū)別,有什么關(guān)系? 電機(jī)槽滿率和銅滿率是電機(jī)設(shè)計(jì)和制造中兩個(gè)相關(guān)但又具有不同含義的重要參數(shù)。在電機(jī)設(shè)計(jì)和制造過(guò)程中,這兩個(gè)參數(shù)的選擇和優(yōu)化對(duì)電機(jī)性能和效率起著至關(guān)重要的作用。本文將
    的頭像 發(fā)表于 12-25 11:47 ?909次閱讀

    PCB和集成電路是什么關(guān)系?有什么區(qū)別

    PCB和集成電路是什么關(guān)系?有什么區(qū)別? PCB(印刷電路板)和集成電路是現(xiàn)代電子領(lǐng)域中非常重要的兩個(gè)概念。它們?cè)陔娮釉O(shè)備的設(shè)計(jì)、制造和使用中扮演著至關(guān)重要的角色。 首先,我們來(lái)了解一下PCB的概念
    的頭像 發(fā)表于 12-21 13:49 ?952次閱讀

    步進(jìn)電機(jī)的轉(zhuǎn)速和轉(zhuǎn)矩是什么關(guān)系?轉(zhuǎn)速高低對(duì)轉(zhuǎn)矩的影響?

    步進(jìn)電機(jī)的轉(zhuǎn)速和轉(zhuǎn)矩是什么關(guān)系?轉(zhuǎn)速高低對(duì)轉(zhuǎn)矩的影響?
    發(fā)表于 12-12 07:00

    窗函數(shù)對(duì)FFT有什么影響?他們是什么關(guān)系?

    窗函數(shù)對(duì)FFT有什么影響?他們是什么關(guān)系?在visualStudio軟建中,要對(duì)音頻信號(hào)進(jìn)行FFT變換時(shí),需要加窗函數(shù)進(jìn)行控制,這是為什么?窗函數(shù)對(duì)FFT有什么影響?窗函數(shù)是起到截取數(shù)據(jù)大小作用還是起到插零的作用?
    發(fā)表于 11-30 06:24

    MOS管和場(chǎng)效應(yīng)管有什么關(guān)系?

    MOS管和場(chǎng)效應(yīng)管有什么關(guān)系?對(duì)于初學(xué)者來(lái)說(shuō),這兩個(gè)名字常常讓人混淆,MOS管到底是不是場(chǎng)效應(yīng)管?
    的頭像 發(fā)表于 11-13 17:23 ?1410次閱讀
    MOS管和場(chǎng)效應(yīng)管有<b class='flag-5'>什么關(guān)系</b>?

    RPC 和 REST 區(qū)別是什么

    區(qū)別呢? 有使用經(jīng)驗(yàn)的人,就會(huì)知道: 前者(RESTful)主要用于各組件之間的通信(如nova與glance的通信),或者說(shuō)用于組件對(duì)外提供調(diào)用接口 而后者(RPC)則用于同一組件中各個(gè)不同模塊
    的頭像 發(fā)表于 11-02 10:40 ?2694次閱讀
    <b class='flag-5'>RPC</b> 和 REST <b class='flag-5'>區(qū)別</b>是什么

    射頻和基帶區(qū)別是什么?射頻芯片和基帶芯片是什么關(guān)系?

    射頻和基帶區(qū)別是什么?射頻芯片和基帶芯片是什么關(guān)系? 射頻和基帶是無(wú)線通信系統(tǒng)中兩個(gè)最基本的概念。射頻表示高頻信號(hào),也就是載有信息的無(wú)線電信號(hào)?;鶐t是低頻信號(hào),包含了幾乎整個(gè)無(wú)線電通信信號(hào)的信息
    的頭像 發(fā)表于 10-25 15:02 ?3031次閱讀

    RS485與modbus是什么關(guān)系?

    RS485與modbus是什么關(guān)系
    發(fā)表于 10-23 06:22

    SPI通信中的CS和SS之間有什么關(guān)系?

    SPI通信中的CS和SS之間有什么關(guān)系
    發(fā)表于 10-20 07:45

    DSPIC與DSP什么關(guān)系?

    DSPIC與DSP什么關(guān)系
    發(fā)表于 10-17 06:38

    請(qǐng)問(wèn)ADC的采樣頻率和分辨率有什么關(guān)系嗎?

    ADC的采樣頻率和分辨率有什么關(guān)系嗎?
    發(fā)表于 10-15 08:24

    DM9000的CMD與讀寫操作有什么關(guān)系?

    DM9000的CMD與讀寫操作有什么關(guān)系
    發(fā)表于 09-27 08:17