我正在研究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目录)以及SockJS。直接来自cdn.sockjs.org。
我在最新的Chrome和Firefox(在OSX上)上尝试了此示例,并且发生了同样的事情。没有建立连接。
同样,返回到Apollo附带的标准示例也可以,但是我想找出为什么StompJS而不是StockJS失败的原因。
有人看过这个问题吗?
谢谢。
-AP_
最佳答案
您需要修改ActiveMQ-Apollo Web配置,以支持跨域资源共享(CORS),如下所述:
Enabling CORS
W3C CORS Specification
基本上,服务器需要执行以下操作:
HTTP OPTIONS的处理通常可以使用单个Web筛选器匹配筛选器模式“/ *”来完成。
另请参见ActiveMQ Apollo 1.7支持的“cors_origin” WebSocket连接器URL查询参数
关于activemq - 通过ActiveMQ-Apollo在sock.js上使用stomp.js似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18217327/