web-dev-qa-db-ja.com

socket.io-XHRポーリングとflashsocketおよびwebsocket

Node.jsとsocket.ioを使用しています。 socket.ioの接続速度に問題があります。 Internet ExplorerおよびOperaで接続速度に問題があります。-flashsocketまたはwebsocketを使用している場合。トランスポートポーリングモードを使用している場合XHR接続が高速です-すべてのブラウザー(IE 、FF、Chrome、Opera)。

XHRポーリングとFlash/WebSocketのトランスポートモードの違いは何ですか?最適な交通手段は何ですか?接続速度を最適化する方法はsocket.ioですか?

アドバイスありがとうございます!

23
Jenan

時間の経過に伴う接続の一般的な速度がWebブラウザー間で異なっていたとしても驚きますが、Internet ExplorerとOpera=ネイティブのWebSocketサポートはデフォルトで無効になっているため利用できません。FlashSocketを選択した場合、接続を確立する前に追加のFlashオブジェクト(SWFファイル)をダウンロードする必要があります。

WebSocketはIE10とOpera=で導入されていますが、デフォルトでは無効になっています。

トランスポートモードの違いは何ですか-XHR-pollingとflash/websocket?

  • XHR-polling-参照 http://en.wikipedia.org/wiki/Push_technology#Long_polling
  • FlashSocket接続-Flash Socketオブジェクトを使用してWebSocketサーバーへの接続を確立し、WebSocketプロトコルを使用して通信します。つまり、FlashとJavaScriptの間に相互作用があり、追加のFlashオブジェクト(SWFファイル)をダウンロードする必要があります。

最適な交通手段は何ですか?

ネイティブでサポートするWebブラウザー(Chrome、Firefox、Safari)用のWebSocket。 Flashオブジェクト(SWFファイル)がブラウザーのキャッシュにある場合、接続は高速になります。そうでない場合は、遅延が発生します。 XHR Long-Pollingは優れたソリューションであり、ブラウザー間で機能しますが、欠点もあります。

  • ポーリングリクエスト間で、表示されているデータが古くなっている(古い)可能性があります。
  • HTTP Long-Pollingは複数の接続を使用して双方向機能をシミュレートするため、WebSocketで使用される単一のTCP接続よりも効率の悪い接続方法です。
  • HTTPにはオーバーヘッドがあり、追加のヘッダー情報が要求時に送信され、後続の各要求で送信されます。

接続速度を最適化する方法はsocket.ioですか?

(私はsocket.ioにかなり新しいですが、これは単なる提案です)

configuring Socket.io docs を見て、接続しているブラウザーに基づいてtransportsを条件付きで設定できるかどうかを確認します。あなたの経験に基づくと、これは次のようになります:

  • Chrome、Firefox、Safari-WebSockets
  • IE、Opera-XHR-Polling
32
leggetter

接続の時間を短縮するには、「接続タイムアウト」パラメーターを使用して、接続タイムアウト(デフォルトでは10秒)を短くしてみます。

たとえば、接続タイムアウトを1秒に減らすには:

socket = io.connect('http://your-site.com',{'connect timeout': 1000});
5
leszek.hanusz