精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RPC 和 REST 區別是什么

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 10:40 ? 次閱讀

01. 既 REST ,何 RPC ?

在 OpenStack 里的進程間通信方式主要有兩種,一種是基于HTTP協議的RESTFul API方式,另一種則是RPC調用。

那么這兩種方式在應用場景上有何區別呢?

有使用經驗的人,就會知道:

  • 前者(RESTful)主要用于各組件之間的通信(如nova與glance的通信),或者說用于組件對外提供調用接口
  • 而后者(RPC)則用于同一組件中各個不同模塊之間的通信(如nova組件中nova-compute與nova-scheduler的通信)。

基于RESTful API的通信方式主要是應用了WSGI,這個知識點,我在前一篇文章中,有深入地講解過,你可以點擊查看 。

花了兩個星期,我終于把 WSGI 整明白了

按照慣例,我會先給你提兩個問題,帶著這兩個問題你再往下看:

1、RPC 和 REST 區別是什么?
2、為什么要采用RPC呢?

首先,第一個問題:RPC 和 REST 區別是什么?

你一定會覺得這個問題很奇怪,是的,包括我,但是你在網絡上一搜,會發現類似對比的文章比比皆是,我在想可能很多初學者由于基礎不牢固,才會將不相干的二者拿出來對比吧。既然是這樣,那為了讓你更加了解陌生的RPC,就從你熟悉得不能再熟悉的 REST 入手吧。

01、所屬類別不同

REST,是Representational State Transfer 的簡寫,中文描述表述性狀態傳遞(是指某個瞬間狀態的資源數據的快照,包括資源數據的內容、表述格式(XML、JSON)等信息。)

REST 是一種軟件架構風格。這種風格的典型應用,就是HTTP。其因為簡單、擴展性強的特點而廣受開發者的青睞。

而RPC 呢,是 Remote Procedure Call Protocol 的簡寫,中文描述是遠程過程調用,它可以實現客戶端像調用本地服務(方法)一樣調用服務器的服務(方法)。

而 RPC 可以基于 TCP/UDP,也可以基于 HTTP 協議進行傳輸的,按理說它和REST不是一個層面意義上的東西,不應該放在一起討論,但是誰讓REST這么流行呢,它是目前最流行的一套互聯網應用程序的API設計標準,某種意義下,我們說 REST 可以其實就是指代 HTTP 協議。

02、使用方式不同

從使用上來看 ,HTTP 接口只關注服務提供方,對于客戶端怎么調用并不關心。接口只要保證有客戶端調用時,返回對應的數據就行了。而RPC則要求客戶端接口保持和服務端的一致。

  • REST 是服務端把方法寫好,客戶端并不知道具體方法。客戶端只想獲取資源,所以發起HTTP請求,而服務端接收到請求后根據URI經過一系列的路由才定位到方法上面去
  • RPC是服務端提供好方法給客戶端調用,客戶端需要知道服務端的具體類,具體方法,然后像調用本地方法一樣直接調用它。

03、面向對象不同

從設計上來看,RPC,所謂的遠程過程調用 ,是面向方法的 ,REST:所謂的 Representational state transfer ,是面向資源的,除此之外,還有一種叫做 SOA,所謂的面向服務的架構,它是面向消息的,這個接觸不多,就不多說了。

04、序列化協議不同

接口調用通常包含兩個部分,序列化和通信協議。

通信協議,上面已經提及了,REST 是 基于 HTTP 協議,而 RPC 可以基于 TCP/UDP,也可以基于 HTTP 協議進行傳輸的。

常見的序列化協議,有:json、xml、hession、protobuf、thrift、text、bytes等,REST 通常使用的是 JSON或者XML,而 RPC 使用的是 JSON-RPC,或者 XML-RPC。

通過以上幾點,我們知道了 REST 和 RPC 之間有很明顯的差異。

然后第二個問題:為什么要采用RPC呢?

那到底為何要使用 RPC,單純的依靠RESTful API不可以嗎?為什么要搞這么多復雜的協議,渣渣表示真的學不過來了。

關于這一點,以下幾點僅是我的個人猜想,僅供交流哈:

  1. RPC 和 REST 兩者的定位不同,REST 面向資源,更注重接口的規范,因為要保證通用性更強,所以對外最好通過 REST。而 RPC 面向方法,主要用于函數方法的調用,可以適合更復雜通信需求的場景。
  2. RESTful API客戶端與服務端之間采用的是同步機制,當發送HTTP請求時,客戶端需要等待服務端的響應。當然對于這一點是可以通過一些技術來實現異步的機制的。
  3. 采用RESTful API,客戶端與服務端之間雖然可以獨立開發,但還是存在耦合。比如,客戶端在發送請求的時,必須知道服務器的地址,且必須保證服務器正常工作。而 rpc + ralbbimq中間件可以實現低耦合的分布式集群架構。

說了這么多,我們該如何選擇這兩者呢?我總結了如下兩點,供你參考:

  1. REST 接口更加規范,通用適配性要求高,建議對外的接口都統一成 REST(我接觸過 zabbix,其 API 是基于 JSON-RPC 2.0協議的)。而組件內部的各個模塊,可以選擇 RPC,一個是不用耗費太多精力去開發和維護多套的HTTP接口,一個RPC的調用性能更高(見下條)
  2. 從性能角度看,由于HTTP本身提供了豐富的狀態功能與擴展功能,但也正由于HTTP提供的功能過多,導致在網絡傳輸時,需要攜帶的信息更多,從性能角度上講,較為低效。而RPC服務網絡傳輸上僅傳輸與業務內容相關的數據,傳輸數據更小,性能更高。

02. 實現遠程調用的三種方式

“遠程調用”意思就是:被調用方法的具體實現不在程序運行本地,而是在別的某個地方(分布到各個服務器),調用者只想要函數運算的結果,卻不需要實現函數的具體細節。

光說不練嘴把式,接下來,我將分別用三種不同的方式全面地讓你搞明白 rpc 遠程調用是如何實現的。

01、基于 xml-rpc

Python實現 rpc,可以使用標準庫里的 SimpleXMLRPCServer,它是基于XML-RPC 協議的。

有了這個模塊,開啟一個 rpc server,就變得相當簡單了。執行以下代碼:

import SimpleXMLRPCServer

class calculate:
    def add(self, x, y):
        return x + y

    def multiply(self, x, y):
        return x * y

    def subtract(self, x, y):
        return abs(x-y)

    def divide(self, x, y):
        return x/y


obj = calculate()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8088))
# 將實例注冊給rpc server
server.register_instance(obj)

print "Listening on port 8088"
server.serve_forever()

有了 rpc server,接下來就是 rpc client,由于我們上面使用的是 XML-RPC,所以 rpc clinet 需要使用xmlrpclib 這個庫。

import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:8088")

然后,我們通過 server_proxy 對象就可以遠程調用之前的rpc server的函數了。

> > server.add(2, 3)
5
 >> > server.multiply(2, 3)
6
 >> > server.subtract(2, 3)
1
 >> > server.divide(2, 3)
0

SimpleXMLRPCServer是一個單線程的服務器。這意味著,如果幾個客戶端同時發出多個請求,其它的請求就必須等待第一個請求完成以后才能繼續。

若非要使用 SimpleXMLRPCServer 實現多線程并發,其實也不難。只要將代碼改成如下即可。

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn
class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass

class MyObject:
    def hello(self):
        return "hello xmlprc"

obj = MyObject()
server = ThreadXMLRPCServer(("localhost", 8088), allow_none=True)
server.register_instance(obj)

print "Listening on port 8088"
server.serve_forever()

02、基于json-rpc

SimpleXMLRPCServer 是基于 xml-rpc 實現的遠程調用,上面我們也提到 除了 xml-rpc 之外,還有 json-rpc 協議。

那 python 如何實現基于 json-rpc 協議呢?

答案是很多,很多web框架其自身都自己實現了json-rpc,但我們要獨立這些框架之外,要尋求一種較為干凈的解決方案,我查找到的選擇有兩種

第一種是 jsonrpclib

pip install jsonrpclib -i https://pypi.douban.com/simple

第二種是 python-jsonrpc

pip install python-jsonrpc -i https://pypi.douban.com/simple

先來看第一種 jsonrpclib

它與 Python 標準庫的 SimpleXMLRPCServer 很類似(因為它的類名就叫做 SimpleJSONRPCServer ,不明真相的人真以為它們是親兄弟)。或許可以說,jsonrpclib 就是仿照 SimpleXMLRPCServer 標準庫來進行編寫的。

它的導入與 SimpleXMLRPCServer 略有不同,因為SimpleJSONRPCServer分布在jsonrpclib庫中。

服務端

from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer

server = SimpleJSONRPCServer(('localhost', 8080))
server.register_function(lambda x,y: x+y, 'add')
server.serve_forever()

客戶端

import jsonrpclib

server = jsonrpclib.Server("http://localhost:8080")

圖片

再來看第二種python-jsonrpc,寫起來貌似有些復雜。

服務端

import pyjsonrpc


class RequestHandler(pyjsonrpc.HttpRequestHandler):

    @pyjsonrpc.rpcmethod
    def add(self, a, b):
        """Test method"""
        return a + b

http_server = pyjsonrpc.ThreadingHttpServer(
    server_address=('localhost', 8080),
    RequestHandlerClass=RequestHandler
)
print "Starting HTTP server ..."
print "URL: http://localhost:8080"
http_server.serve_forever()

客戶端

import pyjsonrpc

http_client = pyjsonrpc.HttpClient(
    url="http://localhost:8080/jsonrpc"
)

調用過程如下

圖片

還記得上面我提到過的 zabbix API,因為我有接觸過,所以也拎出來講講。zabbix API 也是基于 json-rpc 2.0協議實現的。

因為內容較多,這里只帶大家打個,zabbix 是如何調用的:直接指明要調用 zabbix server 的哪個方法,要傳給這個方法的參數有哪些。

圖片

03、基于 zerorpc

以上介紹的兩種rpc遠程調用方式,如果你足夠細心,可以發現他們都是http+rpc 兩種協議結合實現的。

接下來,我們要介紹的這種(zerorpc),就不再使用走 http 了。

zerorpc 這個第三方庫,它是基于TCP協議、 ZeroMQ 和 MessagePack的,速度相對快,響應時間短,并發高。zerorpc 和 pyjsonrpc 一樣,需要額外安裝,雖然SimpleXMLRPCServer不需要額外安裝,但是SimpleXMLRPCServer性能相對差一些。

pip install zerorpc -i https://pypi.douban.com/simple

服務端代碼

import zerorpc

class caculate(object):
    def hello(self, name):
        return 'hello, {}'.format(name)

    def add(self, x, y):
        return x + y

    def multiply(self, x, y):
        return x * y

    def subtract(self, x, y):
        return abs(x-y)

    def divide(self, x, y):
        return x/y

s = zerorpc.Server(caculate())

s.bind("tcp://0.0.0.0:4242")
s.run()

客戶端

import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")

調用過程如下

圖片

客戶端除了可以使用zerorpc框架實現代碼調用之外,它還支持使用“命令行”的方式調用。

圖片

客戶端可以使用命令行,那服務端是不是也可以呢?

是的,通過 Github 上的文檔幾個 demo 可以體驗到這個第三方庫做真的是優秀。

比如我們可以用下面這個命令,創建一個rpc server,后面這個 time Python 標準庫中的 time 模塊,zerorpc 會將 time 注冊綁定以供client調用。

zerorpc --server --bind tcp://127.0.0.1:1234 time

在客戶端,就可以用這條命令來遠程調用這個 time 函數。

zerorpc --client --connect tcp://127.0.0.1:1234 strftime %Y/%m/%d

調用過程如下

圖片

03. 往rpc中引入消息中間件

經過了上面的學習,我們已經學會了如何使用多種方式實現rpc遠程調用。

通過對比,zerorpc 可以說是脫穎而出,一支獨秀。

但為何在 OpenStack 中,rpc client 不直接 rpc 調用 rpc server ,而是先把 rpc 調用請求發給 RabbitMQ ,再由訂閱者(rpc server)來取消息,最終實現遠程調用呢?

為此,我也做了一番思考:

OpenStack 組件繁多,在一個較大的集群內部每個組件內部通過rpc通信頻繁,如果都采用rpc直連調用的方式,連接數會非常地多,開銷大,若有些 server 是單線程的模式,超時會非常的嚴重。

OpenStack 是復雜的分布式集群架構,會有多個 rpc server 同時工作,假設有 server01,server02,server03 三個server,當 rpc client 要發出rpc請求時,發給哪個好呢?這是問題一。

你可能會說輪循或者隨機,這樣對大家都公平。這樣的話還會引出另一個問題,倘若請求剛好發到server01,而server01剛好不湊巧,可能由于機器或者其他因為導致服務沒在工作,那這個rpc消息可就直接失敗了呀。要知道做為一個集群,高可用是基本要求,如果出現剛剛那樣的情況其實是很尷尬的。這是問題二。

集群有可能根據實際需要擴充節點數量,如果使用直接調用,耦合度太高,不利于部署和生產。這是問題三。

引入消息中間件,可以很好的解決這些問題。

解決問題一 :消息只有一份,接收者由AMQP的負載算法決定,默認為在所有Receiver中均勻發送(round robin)。

解決問題二 :有了消息中間件做緩沖站,client 可以任性隨意的發,server 都掛掉了?沒有關系,等 server 正常工作后,自己來消息中間件取就行了。

解決問題三 :無論有多少節點,它們只要認識消息中間件這一個中介就足夠了。

04. 消息隊列你應該知道什么?

既然講到了消息隊列,如果你之前沒有接觸過這塊內容,最好花幾分鐘的時間跟我好好過下關于消息隊列的幾個基礎概念。

首先,RPC只是定義了一個通信接口,其底層的實現可以各不相同,可以是 socket,也可以是今天要講的 AMQP。

AMQP(Advanced Message Queuing Protocol)是一種基于隊列的可靠消息服務協議,作為一種通信協議,AMQP同樣存在多個實現,如Apache Qpid,RabbitMQ等。

以下是 AMQP 中的幾個必知的概念:

Publisher :消息發布者

Receiver :消息接收者,在RabbitMQ中叫訂閱者:Subscriber。

Queue :用來保存消息的存儲空間,消息沒有被receiver前,保存在隊列中。

Exchange :用來接收Publisher發出的消息,根據Routing key 轉發消息到對應的Message Queue中,至于轉到哪個隊列里,這個路由算法又由exchange type決定的。

Exchange type :主要四種描述exchange的類型。

direct:消息路由到滿足此條件的隊列中(queue,可以有多個):routing key = binding key

topic:消息路由到滿足此條件的隊列中(queue,可以有多個):routing key 匹配 binding pattern. binding pattern是類似正則表達式的字符串,可以滿足復雜的路由條件。

fanout:消息路由到多有綁定到該exchange的隊列中。

**binding ** :binding是用來描述exchange和queue之間的關系的概念,一個exchang可以綁定多個隊列,這些關系由binding建立。前面說的binding key /binding pattern也是在binding中給出。

在網上找了個圖,可以很清晰地描述幾個名詞的關系。

圖片

關于AMQP,有幾下幾點值得注意:

  1. 每個receiver/subscriber 在接收消息前都需要創建binding。
  2. 一個隊列可以有多個receiver,隊列里的一個消息只能發給一個receiver。
  3. 一個消息可以被發送到一個隊列中,也可以被發送到多個多列中。多隊列情況下,一個消息可以被多個receiver收到并處理。Openstack RPC中這兩種情況都會用到。

05. 生產中是如何使用RPC的?

前面鋪墊了那么久,終于到了講真實應用的場景。在生產中RPC是如何應用的呢?

其他模型我不太清楚,在 OpenStack 中的應用模型是這樣的

圖片

至于為什么要如此設計,前面我已經給出了自己的觀點。

接下來,就是源碼解讀 OpenStack ,看看其是如何通過rpc進行遠程調用的。如若你對此沒有興趣( 我知道很多人對此都沒有興趣,所以不浪費大家時間 ), 可以直接跳過這一節,進入下一節

目前Openstack中有兩種RPC實現,一種是在oslo messaging,一種是在openstack.common.rpc。

openstack.common.rpc是舊的實現,oslo messaging是對openstack.common.rpc的重構。openstack.common.rpc在每個項目中都存在一份拷貝,oslo messaging即將這些公共代碼抽取出來,形成一個新的項目。oslo messaging也對RPC API 進行了重新設計,對多種 transport 做了進一步封裝,底層也是用到了kombu這個AMQP庫。(注:Kombu 是Python中的messaging庫。Kombu旨在通過為AMQ協議提供慣用的高級接口,使Python中的消息傳遞盡可能簡單,并為常見的消息傳遞問題提供經過驗證和測試的解決方案。)

關于oslo_messaging庫,主要提供了兩種獨立的API:

  1. oslo.messaging.rpc(實現了客戶端-服務器遠程過程調用)
  2. oslo.messaging.notify(實現了事件的通知機制)

因為 notify 實現是太簡單了,所以這里我就不多說了,如果有人想要看這方面內容,可以收藏我的博客(http://python-online.cn) ,我會更新補充 notify 的內容。

OpenStack RPC 模塊提供了 rpc.call,rpc.cast, rpc.fanout_cast 三種 RPC 調用方法,發送和接收 RPC 請求。

  • rpc.call 發送 RPC 同步請求并返回請求處理結果。
  • rpc.cast 發送 RPC 異步請求,與 rpc.call 不同之處在于,不需要請求處理結果的返回。

rpc.call 和 .rpc.cast 從實現代碼上看,他們的區別很小,就是call調用時候會帶有wait_for_reply=True參數,而cast不帶。

要了解 rpc 的調用機制呢,首先要知道 oslo_messaging 的幾個概念主要方法有四個:

transport :RPC功能的底層實現方法,這里是rabbitmq的消息隊列的訪問路徑

transport 就是定義你如何訪連接消息中間件,比如你使用的是 Rabbitmq,那在 nova.conf中應該有一行transport_url的配置,可以很清楚地看出指定了 rabbitmq 為消息中間件,并配置了連接rabbitmq的user,passwd,主機,端口

transport_url=rabbit://user:passwd@host:5672

圖片

def get_transport(conf, url=None, allowed_remote_exmods=None):
    return _get_transport(conf, url, allowed_remote_exmods,
                          transport_cls=RPCTransport)

target :指定RPC topic交換機的匹配信息和綁定主機。

target用來表述 RPC 服務器監聽topic,server名稱和server監聽的exchange,是否廣播fanout。

class Target(object):
        def __init__(self, exchange=None, topic=None, namespace=None,
                 version=None, server=None, fanout=None,
                 legacy_namespaces=None):
        self.exchange = exchange
        self.topic = topic
        self.namespace = namespace
        self.version = version
        self.server = server
        self.fanout = fanout
        self.accepted_namespaces = [namespace] + (legacy_namespaces or [])

rpc server 要獲取消息,需要定義target,就像一個門牌號一樣。

圖片

rpc client 要發送消息,也需要有target,說明消息要發到哪去。

圖片

endpoints:是可供別人遠程調用的對象

RPC服務器暴露出endpoint,每個 endpoint 包涵一系列的可被遠程客戶端通過 transport 調用的方法。直觀理解,可以參考nova-conductor創建rpc server的代碼,這邊的endpoints就是 nova/manager.py:ConductorManager()

圖片

dispatcher :分發器,這是 rpc server 才有的概念

圖片

只有通過它 server 端才知道接收到的rpc請求,要交給誰處理,怎么處理?

在client端,是這樣指定要調用哪個方法的。

圖片

而在server端,是如何知道要執行這個方法的呢?這就是dispatcher 要干的事,它從 endpoint 里找到這個方法,然后執行,最后返回。

圖片

Serializer :在 python 對象和message(notification) 之間數據做序列化或是反序列化的基類。

主要方法有四個:

1. deserialize_context(ctxt) :對字典變成 request contenxt.
2. deserialize_entity(ctxt, entity) :對entity做反序列化,其中ctxt是已經deserialize過的,entity是要處理的。 
3. serialize_context(ctxt) :將Request context變成字典類型 
4. serialize_entity(ctxt, entity) :對entity做序列化,其中ctxt是已經deserialize過的,entity是要處理的。

executor :服務的運行方式,單線程或者多線程

每個notification listener都和一個executor綁定,來控制收到的notification如何分配。默認情況下,使用的是blocking executor(具體特性參加executor一節)

oslo_messaging.get_notification_listener(transport, targets, endpoints, executor=’blocking’, serializer=None, allow_requeue=False, pool=None)

rpc server 和rpc client 的四個重要方法

  1. reset():Reset service.
  2. start():該方法調用后,server開始poll,從transport中接收message,然后轉發給dispatcher.該message處理過程一直進行,直到stop方法被調用。executor決定server的IO處理策略。可能會是用一個新進程、新協程來做poll操作,或是直接簡單的在一個循環中注冊一個回調。同樣,executor也決定分配message的方式,是在一個新線程中dispatch或是…..
  3. stop():當調用stop之后,新的message不會被處理。但是,server可能還在處理一些之前沒有處理完的message,并且底層driver資源也還一直沒有釋放。
  4. wait():在stop調用之后,可能還有message正在被處理,使用wait方法來阻塞當前進程,直到所有的message都處理完成。之后,底層的driver資源會釋放。

06. 模仿OpenStack寫 rpc 調用

模仿是一種很高效的學習方法,我這里根據 OpenStack 的調用方式,抽取出核心內容,寫成一個簡單的 demo,有對 OpenStack 感興趣的可以了解一下, 大部分人也可以直接跳過這章節

注意以下代碼不能直接運行,你還需要配置 rabbitmq 的連接方式,你可以寫在配置文件中,通過 get_transport 從cfg.CONF 中讀取,也可以直接將其寫成url的格式做成參數,傳給 get_transport 。而且還要nova或者其他openstack組件的環境中運行(因為需要有ctxt這個環境變量)

簡單的 rpc client

#coding=utf-8
import oslo_messaging
from oslo_config import cfg

# 創建 rpc client
transport = oslo_messaging.get_transport(cfg.CONF, url="")
target = oslo_messaging.Target(topic='test', version='2.0')
client = oslo_messaging.RPCClient(transport, target)

# rpc同步調用
client.call(ctxt, 'test', arg=arg)

簡單的 rpc server

#coding=utf-8
from oslo_config import cfg
import oslo_messaging
import time

# 定義endpoint類
class ServerControlEndpoint(object):
    target = oslo_messaging.Target(namespace='control',
                                   version='2.0')

    def __init__(self, server):
        self.server = server

    def stop(self, ctx):
        if self.server:
            self.server.stop()


class TestEndpoint(object):

    def test(self, ctx, arg):
        return arg


# 創建rpc server
transport = oslo_messaging.get_transport(cfg.CONF, url="")
target = oslo_messaging.Target(topic='test', server='server1')
endpoints = [
    ServerControlEndpoint(None),
    TestEndpoint(),
]
server = oslo_messaging.get_rpc_server(transport, target,endpoints,executor='blocking')
try:
    server.start()
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    print("Stopping server")

server.stop()
server.wait()

以上,就是本期推送的全部內容,周末兩天沒有出門,都在寫這篇文章。真的快掏空了我自己,不過寫完后真的很暢快。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8497

    瀏覽量

    150835
  • 數據
    +關注

    關注

    8

    文章

    6892

    瀏覽量

    88828
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11513
  • REST
    +關注

    關注

    0

    文章

    32

    瀏覽量

    9398
收藏 人收藏

    評論

    相關推薦

    通信網絡技術:RPC服務和HTTP服務的區別分析

    很長時間以來都沒有怎么好好搞清楚 RPC(即 Remote Procedure Call,遠程過程調用)和 HTTP 調用的區別,不都是寫一個服務然后在客戶端調用么?這里請允許我迷之一笑~Naive
    的頭像 發表于 11-26 13:52 ?2704次閱讀

    RPC的結構原理是什么?

    遠程過程調用(RPC)是一個協議,程序可以使用這個協議請求網絡中另一臺計算機上某程序的服務而不需知道網絡細節。(過程調用有時也稱作函數調用,或子例行程序調用。)RPC使用client/server模型。請求程序是client,而服務提供程序則為server。
    發表于 10-12 10:43

    RPC是什么

    RPC是什么?RabbitMQ又是什么?
    發表于 10-08 09:24

    REST學習

    學習REST必備
    發表于 07-05 15:22 ?15次下載

    什么是RPC

    什么是RPC   英文原義:Remote Procedure Call Protocol 中文釋義:(RFC-1831)遠過程調用協議 注  解:一種通過
    發表于 02-23 11:48 ?907次閱讀

    Restful 和 RPC 是什么關系與區別

    本文詳細介紹了關于Restful 和 RPC的關系與區別,詳細分析請看下文。
    的頭像 發表于 02-07 15:35 ?3.8w次閱讀
    Restful 和 <b class='flag-5'>RPC</b> 是什么關系與<b class='flag-5'>區別</b>

    什么是RPC?為什么需要RPC

    首先要明確一點:RPC可以用HTTP協議實現,并且用HTTP是建立在 TCP 之上最廣泛使用的 RPC,但是互聯網公司往往用自己的私有協議,比如鵝廠的JCE協議,私有協議不具備通用性為什么還要用呢?因為相比于HTTP協議,RPC
    的頭像 發表于 04-16 12:49 ?1.5w次閱讀
    什么是<b class='flag-5'>RPC</b>?為什么需要<b class='flag-5'>RPC</b>?

    cob光源和led的區別是什么

    顯示屏中,cob光源和led光源的區別是什么?
    的頭像 發表于 12-24 10:18 ?9233次閱讀

    LED和OLED的區別是什么

    LED和OLED的區別是什么?
    的頭像 發表于 01-14 18:30 ?1.7w次閱讀

    REST端口支持構建動態REST請求來使用RESTful API網絡

    REST端口支持構建動態REST請求來使用RESTful API網絡服務。 概覽 REST端口暴露了一個簡單的接口來為REST請求構建頭、授權、主體和HTTP方法。請求體可以在端口配置
    的頭像 發表于 01-17 09:11 ?4799次閱讀

    REST API是什么,如何使用REST端口

    API是Application Programming Interface(應用程序接口)的縮寫,它是拿來描述一個類庫的特征或是如何去運用它。按照目前比較主流的分法,可以分為REST API和非
    的頭像 發表于 02-17 18:00 ?9192次閱讀
    <b class='flag-5'>REST</b> API是什么,如何使用<b class='flag-5'>REST</b>端口

    HTTP和RPC區別與聯系

    HTTP和RPC的相同點:底層通訊都是基于socket,都可以實現遠程調用,都可以實現服務調用服務。
    的頭像 發表于 11-23 08:55 ?1810次閱讀
    HTTP和<b class='flag-5'>RPC</b>的<b class='flag-5'>區別</b>與聯系

    到底什么樣的REST才是最佳REST

    說起 REST API,小伙伴們多多少少都有聽說過,但是如果讓你詳細介紹一下什么是 REST,估計會有很多人講不出來,或者只講出來其中一部分。
    的頭像 發表于 01-17 10:14 ?709次閱讀

    RPC接口和HTTP接口的區別與聯系

    協議。兩者都常用于實現服務,在這個層面最本質的區別是RPC服務主要工作在TCP協議之上(也可以在HTTP協議),而HTTP服務工作在HTTP協議之上。由于
    的頭像 發表于 06-17 14:54 ?1813次閱讀
    <b class='flag-5'>RPC</b>接口和HTTP接口的<b class='flag-5'>區別</b>與聯系

    REST的6大指導原則

    1. 前言 REST 全稱為 :Resource Representational State Transfer. 是一種分布式超媒體系統( distributed hypermedia
    的頭像 發表于 10-09 14:27 ?1492次閱讀