在 sock.js 上使用 stomp.js 和 ActiveMQ-Apollo 似乎不起作用

Posted

技术标签:

【中文标题】在 sock.js 上使用 stomp.js 和 ActiveMQ-Apollo 似乎不起作用【英文标题】:Using stomp.js over sock.js with ActiveMQ-Apollo does not seem to work 【发布时间】:2013-08-15 13:19:36 【问题描述】:

我正在研究 ActiveMQ-Apollo 安装中的一些示例,并使用示例/websocket。

在这个文件中,Stomp.js 被用来建立连接:

client = Stomp.client(url);

该示例运行良好,我可以看到正在发送和接收的消息。问题是 Stomp 使用默认的 WebSocket,有时可能不可用。所以,我想与 SockJS 客户端库集成。根据此页面上 StompJS 的示例 (http://jmesnil.net/stomp-websocket/doc/),应该可以使用以下代码:

<script src="http://cdn.sockjs.org/sockjs-0.3.min.js"></script>
<script>
  // use SockJS implementation instead of the browser's native implementation
  var ws = new SockJS(url);
  var client = Stomp.over(ws);
  [...]
</script>

上面的代码似乎可以正确执行,但是后来我看到以下错误:

XMLHttpRequest cannot load ws://mylocaldomain.com:61623/info. Cross origin requests are only supported for HTTP. sockjs-0.3.js:807
Uncaught Error: NetworkError: DOM Exception 19 

然后,我看到调试窗口显示此消息:

Opening Web Socket...
Whoops! Lost connection to undefined

我从 mylocaldomain.com:80 提供页面,ActiveMQ Apollo 服务器在同一台机器上运行,但在端口 61623 上侦听。我还获取了最新版本的 StompJS(来自 github 上的 dist 目录)为以及直接来自 cdn.sockjs.org 的 SockJS。

我在最新的 Chrome 和 Firefox(在 OSX 上)上尝试了这个例子,同样的事情发生了。没有建立连接。

再次,回到 Apollo 附带的标准示例,它工作正常,但我想知道为什么 StompJS 优于 StockJS 失败。

有人见过这个问题吗?

谢谢。 -AP_

【问题讨论】:

尝试了标准的 WebSocket,StompJS 似乎工作正常。所以,可能与 SockJS 库有关... ActiveMq配置文件的哪些配置需要修改??? 【参考方案1】:

您需要修改 ActiveMQ-Apollo Web 配置以支持跨域资源共享 (CORS),如下所述:

Enabling CORS

W3C CORS Specification

服务器基本上需要做以下事情:

支持浏览器为跨域请求发送的 HTTP OPTIONS 请求(又名 CORS 飞行前请求)。这包括响应 OPTIONS 请求: Access-Control-Allow-Origin 标头(例如:“*”表示允许所有来源) Access-Control-Request-Method 标头(例如:“GET、POST、PUT、DELETE、OPTIONS”) Access-Control-Allow-Headers(例如:“X-Requested-With,Origin,Content-Type, Accept”)

HTTP OPTIONS 的处理通常可以使用单个 Web 过滤器匹配过滤器模式“/*”来完成。 另请参阅ActiveMQ Apollo 1.7 支持的“cors_origin”WebSocket 连接器 URL 查询参数

【讨论】:

以上是关于在 sock.js 上使用 stomp.js 和 ActiveMQ-Apollo 似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

STOMP 上的重复事件 Socket.io 和 Node.js

Angular2 与 Stomp.js

如何使用 stomp.js 在 javascript 中使用 Web 套接字消息?

Spring websocket 和 Stomp.js - 我应该在订阅和发送之间等待多长时间?

stomp.js websocket广播模式

vue项目集成stomp.js接收artemis消息推送