2010-12-13 15 views
1

注:我交張貼在Grails的用戶郵件列表,這個問題如何配置cometd以使用谷歌瀏覽器正常工作?

本週末使用this fantastic blog後作爲指導和Grails的的cometd插件,我能得到我現有的Grails安裝的cometd應用程序。一切工作完美的FireFox和IE瀏覽器(信不信由你),但我遇到谷歌瀏覽器的問題。從我可以告訴它發生在我的javascript中的comet.init()行。

使用Chrome的開發者工具,我看到這個錯誤: 錯誤的URL方案的WebSocket http://localhost:8080/myapp/cometd/handshake

我已經做了很多的搜索,並發現了一個帖子,指出Chrome瀏覽器與網頁套接字和本地主機的問題。有了這些知識,我修改了Hosts文件看起來是這樣的:
127.0.0.1 local.mydomain.com

爲comet.init()的URL,然後變成http://local.mydomain.com:8080/myapp/cometd/handshake。然而,這並沒有解決這個問題,而且Chrome也有同樣的問題,但是這一次它看起來像不喜歡指定的端口。我將我的本地應用程序更改爲在端口80上運行,然後url變成了http://local.mydomain.com/myapp/cometd/handshake,但仍然沒有骰子。

從我所知道的情況來看,cometd 2.0通過在本地不支持WebSocket(Firefox,IE等)的瀏覽器中使用長輪詢來模擬WebSocket,並在支持它的瀏覽器中使用WebSocket(Chrome),所以我猜這就是我的問題來自哪裏。

搜索也讓我相信WebSocket網址應該以ws://而不是http://開頭,所以也許這是我的問題,但我不知道如何使用tomcat/grails進行配置。

有誰知道我可以如何糾正我的問題?

+0

我想我已經找到了一個臨時變通使用此行代碼在我的javascript: cometd.unregisterTransport(「的WebSocket」); 但我仍然很想知道我將來如何在我的grails項目中使用Websocket協議。 – aasukisuki 2010-12-13 20:21:09

回答

3

我想我已經找到了一個在我的javascript中使用這行代碼的臨時工作:cometd.unregisterTransport('websocket');但我仍然很想知道如何在將來使用Websocket協議和我的grails項目

+0

爲我工作以及與jQuery 1.7.2和cometd 2.4.3取消註冊websocket傳輸做了竅門。謝謝你的提示 – 2012-07-01 09:04:42

1

如果您使用的是Grails和Cometd插件,請確保您只是從Javascript中啓用websockets。您也可以使用Jetty 7插件替換Tomcat插件。請記住,如果您使用長輪詢,則配置網址將以http://或https://開頭,如果您使用的是Websockets,則必須以wss://開頭。

試試這個

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

cometd.configure({ 
    url: url 
}); 

我WOLD使用閃光燈橋建議。這比使用長輪詢要快得多。請參閱下面的鏈接。 https://github.com/gimite/web-socket-js

相關問題