我正在研究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 _
答案 0 :(得分:1)
您需要修改ActiveMQ-Apollo Web配置以支持跨源资源共享(CORS),如下所述:
服务器基本上需要执行以下操作:
HTTP OPTIONS的处理通常可以使用单个Web过滤器匹配过滤器模式&#34; / *&#34;来完成。 另见&#34; cors_origin&#34; ActiveMQ Apollo 1.7
支持的WebSocket连接器URL查询参数