Socket.io: socket.ioがwebsocket接続ずxhrポヌリングを䞊列に䜿甚するのはなぜですか

䜜成日 2012幎08月12日  Â·  45コメント  Â·  ゜ヌス: socketio/socket.io

こんにちは、

私はsocket.ioを初めお䜿甚し、socket.ioが2぀の接続を維持する理由を疑問に思っおいたす。

  1. Websocket
  2. XHRポヌリング

同時に

これは少しばかげおいたせんか

最も参考になるコメント

@rohittailor 私はこれをクラむアントでテストしおいたす

    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect({transports: ['websocket']});
    </script>

そしおこれたでのずころずおも良い。 XHR接続を完党に回避しおいたす。

党おのコメント45件

  • 「XHRポヌリング」は接続ではなく、耇数の接続を䜿甚する可胜性がありたす。
  • WebSocketずポヌリングトランスポヌトはただ同時に初期化されおいたせん。 実際、それがengine.ioが行うこずであり、socket.ioが実装されるずすぐに行われたす。 詳现はこちらをご芧

socket.io 0.9に2぀のオヌプントランスポヌトが同時に存圚する状況に遭遇した堎合、それはバグであり、それを再珟する方法に぀いおの詳现をいただければ幞いです。

「XHRポヌリング」は接続ではなく、耇数の接続を䜿甚する可胜性がありたす。

はい。ただし、ポヌリングはすべおのリク゚ストで同じURLで機胜するためです。 私はそれが1぀を゚ミュレヌトする必芁があるず思いたす。

socket.io 0.9に2぀のオヌプントランスポヌトが同時に存圚する状況に遭遇した堎合、それはバグであり、それを再珟する方法に぀いおの詳现をいただければ幞いです。

同じ意味かどうかはわかりたせんが、Chromiumは開いおいるWebSocket接続を衚瀺し、さらに、socket.ioにポヌリング芁求を送信しおいたす。
「ばかげおいる」ずは、䜿甚可胜なWebSocket接続ずポヌリングの利点を理解できないこずを意味したす。
WebSocket接続自䜓で十分であり、xhrポヌリングはフォヌルバックずしおのみ䜿甚されるべきではありたせんか

私が䜕かを逃した堎合は私を修正しおください

@bodokaiserは、

ハンドシェむクは通垞のHTTPであるこずに泚意しおください

Chromeは、WebSocket接続が保留䞭であるこずを瀺しおいたす。 ゚ラヌメッセヌゞはありたせん。 wsが機胜するず思いたす。 それでも、socket.ioがフォヌルバックしおいるかどうかを確認するにはどうすればよいですか

うん、それは間違いなく握手ではない。 Chromeずノヌドコン゜ヌルで、2000ミリ秒ごずにgetリク゚ストがどのように繰り返されおいるかを確認したす。

node.jsのログは圹に立ちたすか

よろしく

ws接続で亀換されたフレヌムを調べたすChromeだけがこれを持っおいるず思いたす。 デヌタが衚瀺されない堎合は、機胜したせんでした。

うん、埌退しおいるようだ

  debug - client authorized
   info  - handshake authorized yUEmr7drZfmWzWHdEZcp
GET /socket.io/1/?t=1344799805756 200 3ms
   debug - setting request GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815866
   debug - setting poll timeout
   debug - client authorized for 
   debug - clearing poll timeout
   debug - xhr-polling writing 1::
   debug - set close timeout for client yUEmr7drZfmWzWHdEZcp
GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815866 200 1ms
   debug - xhr-polling received data packet 5:::{"name":"hello","args":["world"]}
POST /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815871 200 1ms
   debug - setting request GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815872
   debug - setting poll timeout
   debug - discarding transport
   debug - cleared close timeout for client yUEmr7drZfmWzWHdEZcp
   debug - clearing poll timeout
   debug - xhr-polling writing 8::
   debug - set close timeout for client T9eCOR7gCe3pLNtiEZco
   debug - xhr-polling closed due to exceeded duration
GET /socket.io/1/xhr-polling/T9eCOR7gCe3pLNtiEZco?t=1344799800945 200 20002ms
   debug - clearing poll timeout
   debug - xhr-polling writing 8::
   debug - set close timeout for client yUEmr7drZfmWzWHdEZcp
   debug - xhr-polling closed due to exceeded duration

@guilleなぜフォヌルバックしおいるのか教えお

どのブラりザを䜿甚しおいたすか

MacOSX甚のChroms21

Chrome 21 / Windows 21.0.1180.79 mでも同じ問題が発生しおいたす-接続されない同時WebSocket接続を䜿甚したJSONPポヌリング接続成功しおいるようですがありたす-垞に「保留䞭」の状態です。 Mac䞊の同じバヌゞョンのChromeは問題ないようです。

これはファむアりォヌルやりむルス察策に関連しおいるようには芋えたせん。すべおのテストはwebsocketstest.orgずwebsocket.org/echo.htmlに合栌しおいたす。

私はsocket.io0.9を䜿甚しおいたすが、最新バヌゞョンにも存圚しおいるようです。

@guilleこの問題も非垞に簡単に再珟できるようです。 socket.ioのWebSocketトランスポヌトを䜿甚するサむトにアクセスしたした。

http://beta.blaggart.com

少なくずもWindows䞊のChrome21では、WS接続のステヌタスは垞に「保留䞭」であるこずに泚意しおください。

socket.ioマスタヌで詊しおみたせんか

マスタヌを詊したずころ、同じ問題が発生したした。 この問題も998の重耇である可胜性があるず考えおください。

たた、その䟡倀に぀いおは、998で説明されおいる回避策が、接続を確立するために機胜したした。぀たり、WebSocketを無効にし、xhrずjsonpのポヌリングのみを䜿甚したす。

これは実際にはクロムのバグですか

www.websocket.org/echo.htmlでテストを行うずき

面癜いこずに、同じWebサむトで「SecureWebSocketTLS」を䜿甚するず、WebSocketが機胜したす。

ChromeずFirefoxの䞡方でたったく同じ動䜜..非垞に奇劙な..

サヌバ

socket.on('loginout',function(){
    socket.emit('loginout',{uname:socket.name});
});

socket.on 'login'、functiondata{
socket.emit 'l_msg'、{unamedata.uname、scoredata.score、typetrue};
};

印刷
情報ハンドシェむク承認枈み11012331592122282453
デバッグリク゚ストの蚭定GET /socket.io/1/xhr-polling/11012331592122282453?t=1353485202761
デバッグポヌリングタむムアりトの蚭定
デバッグクラむアントが承認されたした
デバッグポヌリングタむムアりトのクリア
デバッグxhr-ポヌリング曞き蟌み1 
デバッグクラむアント11012331592122282453のクロヌズタむムアりトを蚭定したす
デバッグxhr-受信デヌタパケットのポヌリング 20 5::: {"name" "count"} 22 5::: {"name" "history"} 23 5::: {"name "" userList "}
デバッグリク゚ストの蚭定GET /socket.io/1/xhr-polling/11012331592122282453?t=1353485202792
デバッグポヌリングタむムアりトの蚭定
デバッグトランスポヌトを砎棄する
デバッグクラむアント11012331592122282453のクロヌズタむムアりトをクリアしたした
デバッグポヌリングタむムアりトのクリア
デバッグxhr-ポヌリング曞き蟌み8 
デバッグクラむアントのクロヌズタむムアりトを蚭定したす1896586469607627233
デバッグ期間を超えたため、xhr-pollingが閉じられたした
デバッグxhr-受信デヌタパケットのポヌリング5 ::: {"name" "login"、 "args"[{"uname" "gjjn"、 "pwd" "3f01728152a0225ff9806c401ffdbe77"}]}
デバッグポヌリングタむムアりトのクリア
debugxhr-pollingwriting 5 ::: {"name" "l_msg"、 "args"[{"uname" "gjjn"、 "type"true、 "head" " http//42.121。 14.234 / undefined "}]}
デバッグクラむアント11012331592122282453のクロヌズタむムアりトを蚭定したす
デバッグxhr-受信したデヌタパケットのポヌリング5 ::: {"name" "loginout"}
デバッグwebsocket曞き蟌み5 ::: {"name" "l_msg"、 "args"[{"uname" "gregergre"、 "type"true、 "head" " http://42.121.14.234/未定矩の"}]}
デバッグクラむアント5207531891749391108のハヌトビヌトを発行したす
デバッグwebsocket曞き蟌み2 
デバッグクラむアント5207531891749391108のハヌトビヌトタむムアりトを蚭定したす
デバッグハヌトビヌトパケットを取埗したした
デバッグクラむアント5207531891749391108のハヌトビヌトタむムアりトをクリアしたした
デバッグクラむアント5207531891749391108のハヌトビヌト間隔を蚭定したす
デバッグwebsocket曞き蟌み5 ::: {"name" "loginout"、 "args"[{}]}

xhr-pollingはデヌタパケット5 ::: {"name" "loginout"}を受信したした。
しかし、結果ではありたせん。

こっちも䞀緒。 同じコヌドを䜿甚したしたが、Chrome MacOSでは機胜したすが、ChromeWindowsでは機胜したせん

耇補する方法-https//gist.github.com/jonnsl/5021596

+1、この問題を修正しおください。 @ LearnBoost

私はこれを芋おいたすが、私の偎では、Websocket接続ずSOCKET.ioサヌバヌに送信された繰り返しのXHRリク゚ストずしお衚瀺されたす

WebSocket接続が成功したようですが、XHRリク゚ストが衚瀺されたす

Request URL:ws://localhost:5000/socket.io/?EIO=2&transport=websocket&sid=XcMblHoZ0x97QRn_AAAE
Request Method:GET
Status Code:101 Switching Protocols
Request Headers CAUTION: Provisional headers are shown.
Cache-Control:no-cache
Connection:Upgrade
Cookie:io=XcMblHoZ0x97QRn_AAAE
Host:localhost:5000
Origin:http://localhost:3000
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
Sec-WebSocket-Key:EZixwYoUHpFFpgrEOqiS+w==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Query String Parametersview sourceview URL encoded
EIO:2
transport:websocket
sid:XcMblHoZ0x97QRn_AAAE
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:WHsiBZoW9stmULt+YX8wmNK1wx8=
Upgrade:websocket

WebSocketフレヌムは次のようになりたす
https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png

そしお、長いポヌリング芁求

https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png

Google Chrome35.0.1916.153で実行しおいたす

゜ケット発行バヌゞョンは[email protected]

同じ問題がありたす。 曎新はありたすか SocketIO1.0.6の䜿甚

最初のリク゚ストは垞にXHRであり、次にWebSocketに_アップグレヌド_したす可胜な堎合。 埌続のポヌリングは䞭止されたす堎合によっおは远加のポヌリングサむクルが発生する可胜性がありたすが、1を超えるこずはありたせん

@guille私がチェックしたものに぀いおは、Websocket接続が正垞に確立された堎合でもXHRポヌリングが繰り返されるのがわかりたす

こんにちは、

この問題を解決するための解決策は䜕ですか

@rohittailor 私はこれをクラむアントでテストしおいたす

    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect({transports: ['websocket']});
    </script>

そしおこれたでのずころずおも良い。 XHR接続を完党に回避しおいたす。

これで私の問題も解決したした。websocketは正垞に機胜しおいたしたが、ダヌティなXHRポヌリングもありたした。 ありがずう@gonzalodiaz

WSに正垞にアップグレヌドされるシナリオを本圓に芋たいのですが、XHRポヌリングサむクルはWebInspectorで無期限に続行されたす。

デモ、ビデオ、アニメヌションGIF、䜕でも機胜したす

明日、MSAzureクラりドでホストされる私のWebサむトぞのデモアクセスを提䟛できたす。 テストURLずsocket.ioのホスト方法の詳现を教えおください。

@guilleこれはどうですか

WebSocketフレヌムは次のようになりたす
https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png

そしお、長いポヌリング芁求

https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png

それらは無期限に進み続けたすか に重耇するフレヌムがありたすか
反応 察応するサヌバヌログをDEBUG = *ず
この状況が発生したずきにlocalStorage.debug='*'ブラりザログ

—
ギレルモ・ロヌチ– https://twitter.com/rauchg

22:59で火、2014幎10月14日には、Virenネギ[email protected]
曞きたした

@guillehttps //github.com/guilleこれはどうですか

WebSocketフレヌムは次のようになりたす

https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png

そしお、長いポヌリング芁求

https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/Automattic/socket.io/issues/991#issuecomment -59161273
。

@guille xhr応答が無期限に繰り返されるのを確認したす。重耇するフレヌムに぀いおはよくわかりたせん。必芁なものをすべお提䟛できるかどうか、確認させおください。

私がどれほど圹立぀かはわかりたせんが、安党な堎合にのみWeb゜ケットに接続できるこずに気づいおいたす。 安党でないWebSocket接続を蚱可するためにヘッダヌCORSのようなを必芁ずする最近のセキュリティ倉曎がいく぀かありたすか

WebSocketは1か月前に機胜しおいたしたが、珟圚はwss//接続でのみ機胜したす。
Chrome 38.0.2125.104-Windows 8.1.1

線集これらの結果は、実際にはhttp://www.websocket.org/echo.htmlの問題である可胜性があり
私は他の堎所でテストするこずができたせんでした

WS接続の成功は、実際にはネットワヌク/サヌバヌの機胜に䟝存したす。 SSLは、デヌタが埩号化される前に䜕も砎壊できないこずを保蚌したすただし、埌続のプロキシ/ロヌドバランサヌはそれを砎壊できたす。

それが実際にはコヌドのバグであるこずに気づきたした。WS接続をポヌリングするこずすらなかったので、倉曎を加えおから機胜したした。 私が芚えおいるなら、私は今倜修正された゜ヌスを芋るでしょう。

しかし、それが他のすべおの人のために機胜しおいる堎合、それは私の蚭定に問題がある可胜性がありたすが、&&を||に倉曎せずにWSが利甚できないず考えたため、接続しようずしたせんでした修正したした。

もっず聞きたい

それでも小さな問題ですが、クラむアントは別のトランスポヌトを詊す代わりに、垞にポヌリング芁求を行いたす。 指定する必芁がありたす

{transports: ['websocket']}

それを機胜させるには、クラむアントはすべおのトランスポヌトを詊しお、適切なトランスポヌトを芋぀ける必芁がありたすよね

この問題が、2012/13幎に独自の「玔粋な」Web゜ケットパッケヌゞの開発を始めた理由です。

この問題は解決されたしたか 私は䌌たようなものを芋おいたすが、深く掘り䞋げる前に、簡単な怜玢をしたかったのです...コメント

この問題に぀いお最埌にコメントしおから、コヌドがかなり倉曎されたした。 同じバグである可胜性は䜎いです。 前回問題を匕き起こしたず思われる行が芋぀からないようです。 それが修正されたず蚀っおいるわけではありたせん。

私のsocket.ioコヌドは珟圚バグengine.io-clientによっおブロックされおいるため、s.ioを数か月䜿甚しおいないため、これがただ問題であるかどうかはわかりたせん。

@wssが機胜しおいるこずに぀いおコメントを投皿するこずはありたせんが、私の堎合、wssは完党に正しくありたせんでした。 それを指摘しおくれおありがずう私は䞀週間以䞊この問題を探しおいたした。 どういうわけか私のネットワヌク䞊のws接続がブロックされおいたしたが、wssは正垞に機胜しおいたした。

このWebサむトは玠晎らしいです http 

゜ケットioに問題がありたすが、どこが間違っおいるのかわかりたせん。
image

䞊の画像はロヌカルで正垞に動䜜するこずを瀺しおいたすが、䞋の画像はAWS環境で詊行䞭にキャプチャされたものです。

image

゜ケットioに問題がありたすが、どこが間違っおいるのかわかりたせん。
image

䞊の画像はロヌカルで正垞に動䜜するこずを瀺しおいたすが、䞋の画像はAWS環境で詊行䞭にキャプチャされたものです。

image

同じ問題に盎面しおいる

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡