在ActiveMQ-Apollo上使用somp.js上的stomp.js似乎不起作用

时间:2013-08-13 19:16:35

标签: activemq stomp sockjs apollo

我正在研究ActiveMQ-Apollo安装中的一些示例,并使用examples / 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 _

1 个答案:

答案 0 :(得分:1)

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

Enabling CORS

W3C CORS Specification

服务器基本上需要执行以下操作:

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

HTTP OPTIONS的处理通常可以使用单个Web过滤器匹配过滤器模式&#34; / *&#34;来完成。 另见&#34; cors_origin&#34; ActiveMQ Apollo 1.7

支持的WebSocket连接器URL查询参数