實現WebSocket和WAMP協議的開源庫WampSharp

張善友發表於2017-12-17

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的這幅圖說明了一切)

5361433.png

https://github.com/Code-Sharp/WampSharp 實現了 The WebSocket ProtocolThe 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 首先會註冊呼叫到 DealerCaller的呼叫首先到 Dealer, Dealer 會把 Caller 的呼叫路由到對應的 Callee,然後把Callee的結果,返回給Caller.
  • CallerCallee 會跑應用程式碼,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也可以很方便地進行訊息多播。

相關文章