如何配置cometd以使用谷歌浏览器正常工作?

时间:2010-12-13 18:19:24

标签: grails google-chrome comet websocket cometd

注意:我已经在grails-user邮件列表中交叉发布了这个问题

本周末使用this fantastic blog帖子作为指南和cometd grails插件,我能够使用现有的grails应用程序安装cometd。一切都在FireFox和IE中完美运行(信不信由你),但我遇到谷歌Chrome问题。从我可以告诉它发生在我的javascript中的comet.init()行。

使用Chrome的开发者工具,我看到了这个错误: WebSocket http://localhost:8080/myapp/cometd/handshake

的错误网址方案

我已经做了很多搜索,发现一条帖子说Chrome有WebSocket和localhost的问题。有了这些知识,我编辑了我的主机文件,看起来像: 127.0.0.1 local.mydomain.com

comet.init()的网址随后变为http://local.mydomain.com:8080/myapp/cometd/handshake。但是,这并没有解决问题,Chrome也遇到了同样的问题,但这次看起来好像不喜欢指定的端口。我将本地应用程序更改为在端口80上运行,然后网址变为http://local.mydomain.com/myapp/cometd/handshake,但仍然没有骰子。

据我所知,cometd 2.0通过在不支持WebSocket(Firefox,IE等)的浏览器中使用长轮询来模拟WebSocket,并在支持它的浏览器中使用WebSocket(Chrome),所以我猜这就是我的问题所在。

搜索也让我相信WebSocket网址应该以ws://而不是http://开头,所以也许这是我的问题,但我不知道如何用tomcat / grails配置它。

有谁知道我如何纠正我的问题?

2 个答案:

答案 0 :(得分:3)

我想我在javascript中找到了一段临时的工作:cometd.unregisterTransport('websocket');但是我仍然想知道将来如何在我的grails项目中使用Websocket协议

答案 1 :(得分:1)

如果你使用Grails和Cometd插件,请确保你只是从Javascript启用websockets。你还要用Jetty 7插件替换Tomcat插件。请记住,如果您使用长轮询,您的配置URL将以http://或https://开头,如果您使用的是websockets,则必须以wss://开头。

试试这个

var url = "";
if (Websocket === undefined) {
   url = "http://mydomain/myconext/cometd";
} else {
  url = "ws://mydomain/myconext/cometd";
} 

cometd.configure({
    url: url
});

我建议使用闪光灯桥。它比使用长轮询快得多。请参阅以下链接。 https://github.com/gimite/web-socket-js