STOMP Over WebSocket(滑稽的翻譯成跺腳吧)

STOMP是一個簡單的文本定位通訊協議。它定義了一個可互操作的線格式所以,任何可用的跺STOMP的客戶可以與任何消息代理提供方便和廣泛的消息互 語言和平臺之間的溝通(STOMP網站有一個STOMP客戶端和服務器端的實現列表


WebSockets“TCP網絡”。

當谷歌宣佈推出WebSocket谷歌瀏覽器這背後的想法,解釋WebSockets:

WebSocket API允許Web應用程序以簡單的方式與服務器端處理雙向通信。開發人員已經使用XMLHttpRequest(“遼”)等目的,但是XHR使Web應用程序的開發,溝通 往返於服務器的不必要的複雜。XHR基本異步HTTP,因爲你需要使用一個棘手的技術像長掛讓數據從服務器到瀏覽器,簡單的任務迅速變得複雜。相對於 XMLHttpRequest,WebSockets提供真正的雙向通信信道在瀏覽器。一旦你得到一個WebSocket連接,你可以把數據從瀏覽器到服務器通過調用一個send()方法和接收數據從服務器到瀏覽器的消息 事件處理程序。

除了新的WebSocket API,還有一個新的協議(“WebSocket協議”),瀏覽器使用與服務器通信。該協議是TCP因爲需要提供瀏覽器的“同源”的安全模型。這也是 不是HTTP因爲WebSocket流量differers從HTTP的請求響應模型。WebSocket通信使用新的WebSocket協議應該使用更少的帶寬,與一系列的xhrs掛得到,無頭交換一次單 連接已經建立。使用這個新的API和協議,利用簡單的編程模型和更有效的網絡流量,你需要一個新的服務器實現溝通。

API的一部分HTML5並支持(在不同的程度…)大多數現代瀏覽器(包括谷歌瀏覽器,Mac OS X和iOS Firefox和Safari)。

協議支持

這個庫支持踐踏協議的多個版本:

STOMP1

STOMP1.1

服務器的要求

這個庫是不是一個<em>純</em>STOMP客戶端。它的目的是使用WebSocket協議是TCP。基本上,WebSocket協議需要<em>握手</em>之間的瀏覽器的客戶端和服務器以確保瀏覽器的“同源”的安全模型仍然有效。

這意味着,這個庫連接不經常踐踏經紀人因爲他們不會明白通過WebSocket不是STOMP協議發起握手會拒絕連接。

有正在進行的工程添加WebSocket支持STOMP經紀人讓他們接受踐踏在WebSocket協議連接。

hornetq

hornetq由紅帽和JBoss的開源郵件系統開發。

開始hornetq與踐踏過的WebSocket支持,下載最新版本運行以下步驟:

  美元CD hornetq-x.y.z/examples/jms/stomp-websockets
  美元MVN清潔安裝
  …
信息:hq221020:開始3.6.2.final-c0d783c網狀受主版本地:61614 stomp_ws協議
 2013年4月15日1:15:33點org。hornetq。核心。服務器實現。hornetqserverimpl sharedstoreliveactivation美元運行
信息:hq221007:服務器是現在生活
 2013年4月15日下午1:15:33 org.hornetq.core.server.impl.hornetqserverimpl開始
信息:hq221001:hornetq服務器版本2.3.0.cr2(black'n'yellow2,123)[ c9e29e45-a5bd-11e2-976a-b3fef7ceb5df ]

hornetq現在開始聽踩在港口WebSocket六萬一千六百一十四
它接受WebSocket連接從URLWS:/ /本地:61614 /STOMP

配置和運行hornetq與踐踏過的WebSocket啓用,跟隨用法說明

ActiveMQ

ActiveMQ是由Apache開源郵件系統。從5.4開始的快照,ActiveMQ支持WebSocket踩過。

配置和運行ActiveMQ與踐踏在WebSocket啓用,跟隨用法說明

ActiveMQ阿波羅

ActiveMQ阿波羅是ActiveMQ經紀人的下一代。從一開始,阿波羅支持WebSocket踩過。

配置和運行阿波羅與踐踏過的WebSocket啓用,跟隨指令

RabbitMQ

RabbitMQ開源郵件系統由VMware。

配置和運行RabbitMQ與踐踏在WebSocket啓用,遵循安裝說明Web踩插件

高蹺和torquebox

高蹺是一種踐踏本地通信框架,旨在解決處理踐踏作爲通訊主合同,將在它的周圍,而不是簡單地應用現有的 STOMP墊片 服務。

torquebox採用高蹺項目提供WebSockets和踐踏堆棧

stomp.js JavaScript文件下載

你可以下載stomp.js使用它在您的Web應用程序

縮小版還提供了用於生產。

這個JavaScript文件生成CoffeeScript文件看到貢獻部分源代碼下載或瀏覽註釋的源代碼

STOMP的API

單幀

踩過WebSocket提供了一個簡單的映射從一個單幀一個JavaScript對象。

框架對象
財產 類型 筆記
命令 字符串 框架的名稱(“連接”“發送”,等)
標題 JavaScript對象  
身體 字符串  

這個命令標題屬性將始終被定義但標題可以爲空,如果幀沒有頭。這個身體可以是無效的如果幀沒有體。

創建一個踐踏客戶

在一個普通的Web Socket網絡瀏覽器

STOMPJavaScript客戶端將使用單服務器通信WS:/ /URL。

創建一個踐踏客戶端JavaScript對象,你需要調用STOMP客戶端(URL)。對應於服務器的WebSocket的端點URL:

var url =“WS:/ /本地:61614 /STOMP”;
 VAR客戶=STOMP。客戶端(URL;

這個STOMP客戶端(URL,協議)。還可用來覆蓋默認的子協議提供的庫:[ 'v10。STOMPSTOMP]”“V11。(1和1.1規格爲STOMP)。這第二個參數可以是一個字符串或字符串數組指定多個子協議。

在Web瀏覽器中使用自定義的WebSocket

Web瀏覽器支持WebSocket協議的不同版本。一些老的瀏覽器不提供WebSocket JavaScript或暴露在一個名字。默認情況下,stomp.js可以使用Web瀏覽器原生WebSocket類創建WebSocket。

然而,它可以使用其他類型的WebSockets利用踩過(WS)。方法。該方法將對象符合WebSocket的定義。

例如,可以使用提供的實施sockjs項目落在各種瀏覽器特定的傳輸協議來替代:

<腳本src=“http:/ /的CDN。sockjs。org / sockjs-0.3。js“> < /腳本> 
 <腳本> 
 /而不是瀏覽器的本地實現
 VAR WS =新sockjs使用sockjs實施(URL);
 VAR客戶=STOMP。在
 [(WS);
 </…]

使用STOMP客戶端(URL)。用普通的WebSockets或使用踩過(WS)。如果你需要另一種類型的WebSocket。

除此之外,初始化,STOMP API是相同的在這兩種情況下。

在Node.js應用

圖書館還可以用於Node.js應用程序通過使用stompjs NPM包

  美元安裝stompjs NPM

在Node.js應用程序,需要的模塊:

VaR  STOMP=需要('stompjs”);

在連接到一個踐踏經紀人套接字,使用STOMP。overtcp(主機、端口)方法

VAR客戶=STOMP。overtcp('localhost ',61613);

在連接到一個踐踏經紀人網絡插座相反,使用踩overws(URL)。方法

VAR客戶=STOMP。overws('ws:/ /本地:61614 /重”);

除此之外,初始化,STOMP API是相同的無論是在Web瀏覽器中運行的應用程序或Node.js。

連接到服務器

一旦踐踏客戶創建時,它必須調用它的connect()爲了有效地連接和驗證到STOMP服務器的方法。這個方法有兩個強制性參數,登錄密碼對應於用戶的憑據。

在現場,客戶端將使用WebSocket打開一個連接,併發送一個連接

連接是異步的:你有沒有保證是有效連接的時候調用連接退貨被通知的連接,你需要通過一個connect_callback函數的connect()方法

無功connect_callback = function() { 
 /叫回來後,客戶端連接和服務器認證的STOMP
 };

但如果連接失敗會發生什麼?這個connect()方法接受一個可選的error_callback爭論將如果客戶端無法連接到服務器。回調將調用帶有一個參數的,一個錯誤對象相應的STOMP誤差

無功error_callback =函數(誤差){ 
 /顯示錯誤的消息標題:
警報(錯誤。標題。消息);

這個connect()方法接受不同數目的參數,提供簡單的API的使用在大多數情況下:

客戶端連接(登錄名,密碼,connectcallback);
客戶端連接(登錄,密碼,connectcallback,errorCallback);
客戶端連接(登錄,密碼,connectcallback errorCallback,;

哪裏登錄密碼是字符串connectcallbackerrorCallback功能(一些經紀人也需要通過主辦字符串)。

這個connect()方法還可以接受其他兩變種,如果你需要通過額外的頭:

客戶端連接(頭、connectcallback);
客戶端連接(頭、connectcallback,errorCallback;

哪裏是一張地圖,connectcallbackerrorCallback函數。

請注意,如果你使用這些形式,你必須添加登錄密碼(最終主辦標題自己):

VaR的標題= { 
登錄:“mylogin ',
密碼:“mypasscode ',
 /附加報頭
的客戶端ID”:“我的客戶ID 
 };
客戶端連接(標題;

從服務器斷開連接的客戶端,你可以調用它的disconnect()方法斷開是異步的:要斷開時是有效的通知,斷開方法接受一個可選的回調爭論。

;
;

當客戶端斷開時,它不再能夠發送或接收消息。

心臟的跳動

如果跺STOMP經紀人接受1.1幀,心臟的跳動默認情況下啓用。

這個客戶對象有一個心跳字段可用於配置心跳改變進來的外向的整數字段(爲默認值一萬MS):

client.heartbeat.outgoing = 20000;//客戶端會發送心跳每20000ms 
 client.heartbeat.incoming = 0;//客戶端不想從服務器收到的心跳
 / /

心臟的跳動是使用setinterval()窗口。定期發送心跳和/或檢查服務器的心跳。

發送消息

當客戶端連接到服務器,可以發送郵件使用的STOMPsend()方法該方法以強制目的地去踩地對應的參數。有兩個可選參數:標題,一個JavaScript對象包含額外的信息頭和身體,一個字符串對象。

客戶端發送(“/隊列/測試”,{ 9 },優先:“你好,踐踏”);

客戶端將發送一個踐踏發送框架/隊列/測試一頭的目的地優先設置和一個身體你好,STOMP

如果你想用身體發出一個信息,你必須同時通過標題爭論。如果你沒有頭通,使用一個空的javascript文本{ }

客戶端發送(目的地,{ },身體);

訂閱和接收消息

在瀏覽器中接收消息,STOMP客戶端必須先訂閱一個目的地。

你可以使用subscribe()方法來訂閱一個目的地。該方法以2強制參數:目的地一個字符串對應,到目的地回調一、功能消息參數和一個可選擇的論點標題額外的標題,一個JavaScript對象。

var =客戶認購。認購(“/隊列/測試”,回調);

這個subscribe()方法返回一個JavaScript對象與屬性1,身份證件,對應於客戶端訂閱ID和一個方法unsubscribe()可後來退訂的客戶從這個目的地。

默認情況下,圖書館就在標題沒有生成一個唯一的ID。用你自己的身份,通過使用標題爭論:

無功mysubid = '…';
 var =客戶認購。認購(目的,回調,{編號:mysubid };

客戶端將發送一個踐踏訂閱幀服務器登記回調。每次服務器發送一個消息給客戶端,客戶端將調用回調相應的消息一STOMP框架對象:

回調=功能(消息){ 
 /稱當客戶端從服務器接收到一個消息如果
STOMP(消息體){ 
警報(“消息體”+消息體)
 }人{ 
警報(“有空消息”);} } 
 
;

這個subscribe()方法接受一個可選的標題參數指定額外的頭當訂閱到目的地:

VaR的標題= {確認:'客戶','選擇':“位置=“歐洲”};
客戶端訂閱(“/隊列/測試”,message_callback,頭;

客戶指定要處理的消息確認,有興趣接收消息匹配選擇器定位爲“歐洲”

如果你想訂閱客戶到多個目的地,你可以使用相同的回調收到的所有郵件:

消息=功能(消息){ 
 /稱每次客戶端接收到一個消息
 } 
 VAR SUB1 =客戶訂閱(隊列/測試”,消息);
 VAR SUB2 =客戶訂閱(隊列/另一個”,消息;

停止接收短信,客戶可以使用unsubscribe()返回的對象上的方法subscribe()方法

var =客戶認購。認購(…);
 
 
 
訂閱;

JSON支持

STOMP消息主體必須是字符串。如果你想發送和接收JSON對象,您可以使用stringify() JSON。parse() JSON。將JSON對象轉換爲字符串,反之亦然。

無功報價= {符號:'應用',價值:195.46 };
客戶端發送(“/主題/股”,{ },JSON。stringify(引用));
 
客戶訂購(“/主題/股”功能(消息){ var報價= 
 JSON解析(。消息體);
警報(quote.symbol +“”+報價;

確認

默認情況下,STOMP消息將自動被服務器之前的消息發送到客戶端。

客戶可以選擇處理消息確認通過訂閱一個目的地,指定ACK標題設置客戶客戶的個人

在這種情況下,客戶端必須使用ack()消息。通知服務器,它已經確認消息的方法。

var =客戶認購。認購(“/隊列/測試”,
功能(消息){ 
 /做某事的消息
…
 /並承認它
消息。ack();
 },
 {應答:“客戶”};

這個ack()方法接受標題額外的標頭來論證確認消息。例如,它是可能的應答消息作爲交易的一部分,索要發票時ACKSTOMP框架已經有效地被經紀人處理:

VaR Tx =客戶。begin();
 ACK消息。({交易:tx.id,收據:我收到
”});

這個nack()方法也可以用來通知跺1.1經紀人,客戶不使用消息。它以相同的參數比ack()方法

交易

郵件可以發送和承認<em>在交易</em>。

一個事務開始由客戶端使用begin()方法以可選交易一個字符串,它唯一地標識,交易。如果沒有交易通過,圖書館將生成一個自動。

這個方法返回一個JavaScript對象與身份證件屬性對應的交易ID和兩種方法:

  • commit()提交事務
  • abort()中止交易
客戶端可以發送和/或承認的交易信息通過指定交易設置與交易身份證件
//開始交易
 VAR Tx =客戶。begin();
 /發送的消息在一個交易
客戶端發送(“/隊列/測試”,tx.id },{交易”的消息在一個交易”);
 /提交事務有效地發送消息
;

如果你忘了加交易頭時調用send()該消息將是交易的一部分,將直接發送無需等待交易的完成。

VaR TXID =“unique_transaction_identifier”;
 /開始交易
 VAR Tx =客戶。begin();
 /!;
 TX abort();/ /太!消息已發送

調試

代碼中有幾個測試有助於看到的是發送和接收從庫中調試應用程序。

客戶端可以設置其調試屬性函數與需要字符串觀點看所有的調試庫報表:

client.debug =功能(STR){ 
 /附加調試日誌到#調試div在網頁上使用jQuery:
 $(“#調試”)。追加(STR +“\n”);

默認情況下,調試信息記錄在瀏覽器窗口的控制檯。

例子

源代碼包含一個聊天的例子例子/聊天/ index.html

你需要支持WebSocket開始STOMP服務器(例如使用hornetq)。

點擊連接按鈕連接到服務器和訂閱的/隊列/測試/隊列。

然後你可以輸入信息的形式在頁面底部的消息隊列發送STOMP。客戶端接收到的信息將顯示在頁面的頂部。

你也可以把經常踐踏消息和看到他們在瀏覽器中顯示。例如直接使用TelnetSTOMP默認端口:

  美元telnet localhost 61613
  連接
登錄:客人
密碼:客人
 
 ^ @
  連接
會議:1092296064

^ @是一個空(控制- @在ASCII)字節。

  
 ^

你現在應該在你的瀏覽器收到這條訊息。

貢獻


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章