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)。
協議支持
這個庫支持踐踏協議的多個版本:
STOMP1STOMP1.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。STOMP,STOMP]”“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,;
哪裏登錄
,密碼
是字符串connectcallback
和errorCallback
功能(一些經紀人也需要通過主辦字符串)。
這個connect()
方法還可以接受其他兩變種,如果你需要通過額外的頭:
客戶端連接(頭、connectcallback);
客戶端連接(頭、connectcallback,errorCallback;
哪裏頭
是一張地圖,connectcallback
和errorCallback
函數。
請注意,如果你使用這些形式,你必須添加登錄
,密碼
(最終主辦
標題自己):
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。客戶端接收到的信息將顯示在頁面的頂部。
你也可以把經常踐踏消息和看到他們在瀏覽器中顯示。例如直接使用Telnet在STOMP默認端口:
美元telnet localhost 61613 連接 登錄:客人 密碼:客人 ^ @ 連接 會議:1092296064
^ @是一個空(控制- @在ASCII)字節。
^
你現在應該在你的瀏覽器收到這條訊息。
貢獻