我正在研究 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_