1

注:この質問はgrails-userメーリングリストにクロスポストしました

今週末、この素晴らしいブログ投稿をガイドとして使用し、cometd grailsプラグインを使用して、既存のgrailsアプリをcometdにインストールすることができました。すべてがFireFoxとIEで完全に機能します(信じられないかもしれませんが)が、GoogleChromeで問題が発生しています。私が知る限り、JavaScriptのcomet.init()行で発生していることがわかります。

Chromeの開発者ツールを使用すると、次のエラーが表示されます:WebSocketのURLスキームが間違っています http:// localhost:8080 / myapp / cometd / handshake

私はたくさんの検索を行い、ChromeにWebSocketとローカルホストに問題があることを示す投稿を見つけました。その知識を利用して、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を使用しているのでそれが私の問題の原因だと思います。

また、検索の結果、WebSocketのURLはhttp://ではなくws://で始まる必要があると思いました。これが私の問題かもしれませんが、tomcat/grailsでこれを構成する方法がわかりません。

誰かが私の問題を修正する方法を知っていますか?

4

2 に答える 2

3

私のjavascriptでこのコード行を使用することで一時的な回避策を見つけたと思います:cometd.unregisterTransport('websocket'); しかし、将来、grailsプロジェクトでWebsocketプロトコルをどのように使用できるかを知りたいです。

于 2011-02-24T07:29:25.853 に答える
1

GrailsとCometdプラグインを使用している場合は、JavascriptからWebSocketを有効にするだけにしてください。また、TomcatプラグインをJetty7プラグインに置き換えます。長いポーリングを使用している場合、configure URLはhttp://またはhttps://で始まることに注意してください。WebSocketを使用している場合は、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

于 2011-07-18T06:35:12.267 に答える