7

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

node js と socket.io を 2 週間でテストします。私が始めたとき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)しかし、 evenを使用すると、サーバーはクライアントから送信されたメッセージを受信できませんsocket.emit(...)

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

node.js バージョン 0.8.16、socket.io バージョン 0.9.13、および最新のブラウザー (chrome、firefox、opera) を使用しています。

xhr-polling ではなく websocket を使用したい。

4

1 に答える 1

5

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

もちろん、websockets をサポートしていないのは、使用しているブラウザーでも node.js でもありません。これは、サーバーのセットアップによって異なります。

最初のチェック:

  1. リッスンしているポートがファイアウォールで開いています
  2. Web サーバーが WebSocket をサポートしている。Apache を使用していて、リクエストを内部 IP:PORT にプロキシしている場合、apache-websocketpywebsocketなどをインストールしない限り、websocket は機能しません。

私の問題を最終的に解決したのは、ポート 80 でリッスンする Apache を無効にし、node.js がそのポートでリッスンするようにすることでした。これが私を助けてくれたSOの答えです:https://stackoverflow.com/a/7640966/2347777

于 2013-05-03T18:57:37.683 に答える