Websocket Application Messaging Protocol 協議:https://github.com/wamp-proto/wamp-proto
1. 基礎檔案
引入:
WAMP協議是一種建立在Websocket之上可以進行publish&subscribe和rpc的通訊協議。它實現了類似ZeroMQ中的pub&sub通訊模式,同時將這種模式用於傳統的rpc通訊,較好地解耦了通訊端點之間的直接聯絡。
基礎概念:
broker:pub&sub通訊模式中的中介軟體。
dealer:rpc中caller&callee通訊的中介軟體。
router:router其實就是broker和dealer的結合體。
realm:realm為router中的一個活動空間,client之間通訊以realm為活動區間。
client:通訊實體,訊息釋出者/訂閱者,介面呼叫者/實現者。
peer:client或者router。
role:peer所扮演的角色。
topic:pub&sub主題,使用uri格式表達。
procedure:rpc的介面地址,同樣使用uri格式來表達。
通訊模型:
(specification的這幅圖說明了一切)
https://github.com/Code-Sharp/WampSharp 實現了 The WebSocket Protocol 和 The WebSocket Application Messaging Protocol (WAMP) 協議。
特性:
- 支援WebSocket RFC6455和WAMP V1/v2
- 很好的符合標準
- 高效能非同步設計
- 易於使用的API
Client端
Components
的概念,就是元件,是RPC 的呼叫和被呼叫方,也可以是 PubSub的釋出和訂閱方,四種角色都是元件,在這個前提下寫應用code。
RPC模型
3個角色 Caller
, Callee
, Dealer
Caller
(呼叫者) 使用url和引數呼叫遠端介面,Callee
拿到引數去執行,然後返回結果Callee
首先會註冊呼叫到Dealer
,Caller
的呼叫首先到Dealer
,Dealer
會把Caller
的呼叫路由到對應的Callee
,然後把Callee
的結果,返回給Caller
.Caller
和Callee
會跑應用程式碼,Dealer
會做RPC的通用路由。
RPC模型主要有個兩個步驟,註冊程式,呼叫程式。
現在問題是,我寫好了RPC的程式,怎麼註冊到router裡面呢?是在WampSharp中自動生成,還是要手動改配置檔案等?
其實都不是,都是由 Components自己去註冊,其他Componets來自己使用。具體的操作類似 Callee程式連線 crossbar, 然後註冊自己能給別人提供的API,然後Caller
連線 Router crossbario 呼叫程式,如果 Callee
掉線了,那麼 Caller
也就無法呼叫了。
PubSub 模型
有3個角色 Publisher
, Subscriber
, Broker
Publiser
(釋出者)提供 url和對應的 payload, Subscribers
訂閱者可以接收到釋出者的資訊。Broker
就是提供釋出和訂閱的場所。跟我們大多數的訊息佇列中提供的釋出訂閱模式類似.
總結:
WAMP引入的router可以使得後端介面無縫更新,另外realm使得後端介面只暴露功能子集給前端。pub&sub也可以很方便地進行訊息多播。