2013-01-15 6 views
7

この質問はsocket.ioのバージョン< 0.9.xに関するものです。 新しいバージョンには、さまざまなトランスポートとトランスポートの設定方法があります。node.jsとsocket.io。 websocketのトランスポートタイプの設定

2週間でノードjsとsocket.ioをテストします。私が始めたとき、私はクライアントのsocket.send(message)機能から問題を取得します。サーバーにメッセージを送信できません。しかし、私はまだサーバーからメッセージを受け取ることができます。私はこの問題をサーバサイドのコンフィグレーショントランスポートが見つかったときに解決しました:

socket.set('transports',[ 
    'xhr-polling' 
    , 'jsonp-polling' 
]); 

すべてが良いです。これで、サーバーにもメッセージを送信できます。しかし、なぜ私はトランスポートを構成しなければならないのかという疑問が残っています。このようにデフォルト設定socket.io使用用WebSocket輸送:

socket.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
]); 

はそれが最初ではなく、XHRポーリングでのWebSocketを使用しています。しかし、サーバはsocket.send(msg)でもsocket.emit(...)を使用しても、クライアントから送信されたメッセージは受信できません。

問題は、ここでWebSocketをサポートしていないのは何ですか?ブラウザやnode.js ...申し訳ありませんが、私はGoogleから非常に多くのページを検索し、私はこれに対する答えを見つけていません。

私はバージョン0.8.16、socket.ioバージョン0.9.13と最新のブラウザNode.jsの使用:クロム、Firefoxの、オペラ

私はないXHRポーリングのWebSocketを使用します。

答えて

5

WebSocketがサーバー構成でサポートされていない場合でも、socket.ioは次の最良の方法(xhrポーリングの場合)を選択するため、奇妙です。実際には、socket.ioがデフォルトで 'websocket'をプライマリメソッドとして使用しようとするので、これらのトランスポートを設定する必要はありません。これはおそらくあなたのコードで、他のいくつかの問題を示す可能性がありますか?

WebSocketをサポートしていないものは、あなたが使っているブラウザやもちろんnode.jsではありません。これはサーバーの設定によって異なります。

最初のチェック:あなたが聴いているポートがファイアウォールで開かれている

  1. あなたのウェブサーバは、WebSocketをサポートされています。 Apacheを使用して、内部IPへのリクエストをproxingしている場合:PORTあなたが最終的に私の問題は、Apacheがポート80でリッスンして持つ無効にした解決は何apache-websocketまたはpywebsocket

のようなものをインストールしない限り、WebSocketのは動作しません。そのポートでlistenしているnode.js。ここで私を助けたので、答えは:https://stackoverflow.com/a/7640966/2347777

関連する問題