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)字节。
^
你现在应该在你的浏览器收到这条讯息。
贡献