2016-05-16 9 views
0

私は2つのブラウザsocket.ioクライアントを持っています。例えば。クライアントAとクライアントBはルーム1に接続されています。Socket.io - nodejsサーバー側。再接続後に閉じる

私のコンピュータ(nodejs 5、socket.io 1.4.5がインストールされています)で次のような動作が起こっています。 両方のクライアントがRoom Oneに接続されているとします。クライアントAが切断され(接続が失われた)、タイムアウト後に再接続し、クライアントBがルーム1にメッセージを送信するためにemitを使用しない場合、クライアントAの元のソケットは転送理由:タイムアウトで閉じられます。それは私のために良いことです。私はこの動作が必要です。

反対側: タイムアウト時にクライアントAが切断され(接続が失われて)再接続され、切断された時間にクライアントBがemit for Roomメッセージを使用すると、再接続後のクライアントAの元のソケットはすぐに転送理由で閉じられました:閉じられ、タイムアウトされていません。

タイムアウト時間内に切断されたソケットを選択する動作がいくつかあります。これは、他のいくつかのオンラインソケット試しメッセージを同じ部屋に送信しようとしたときです。エミットされたメッセージが切断されたソケット(クライアント側)に配信できない場合、このソケットはおそらくタイムアウト時に再接続した直後にトランザクションを閉じるために選択されます。

+0

試しましたか? –

+0

そうだと思います。私は他の方法でそれを解決しました。私は、切断イベントで実行される関数に対してsetTimeoutを追加しました。このようにして、タイムアウト時に新しいソケットがこのデータをsetTimeout関数の制限内で受け取るので、古いソケットから新しいソケットに変数にデータを格納できます。 –

+0

もっと良い解決法を知っている人はいますか? –

答えて

0

さらに問題が発生しました。モバイルクライアントが接続を失い、誰かがモバイルクライアントが接続されていた部屋に送信した場合、モバイルソケットはすぐにタイムアウトせずに接続が切断されます。

上記の状況は、Macシステムによって異なります。タイムアウトがなくなった場合、またはクライアントのモバイルが再接続された場合は、すぐにソケットが切断されます。

同じバージョンのノード(6.2)と同じバージョンのソケット(1.4.6)でこの動作が異なる理由は何ですか?

+0

誰も解決策を知らないのですか?本当に? –

関連する問題