私は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の元のソケットはすぐに転送理由で閉じられました:閉じられ、タイムアウトされていません。
タイムアウト時間内に切断されたソケットを選択する動作がいくつかあります。これは、他のいくつかのオンラインソケット試しメッセージを同じ部屋に送信しようとしたときです。エミットされたメッセージが切断されたソケット(クライアント側)に配信できない場合、このソケットはおそらくタイムアウト時に再接続した直後にトランザクションを閉じるために選択されます。
試しましたか? –
そうだと思います。私は他の方法でそれを解決しました。私は、切断イベントで実行される関数に対してsetTimeoutを追加しました。このようにして、タイムアウト時に新しいソケットがこのデータをsetTimeout関数の制限内で受け取るので、古いソケットから新しいソケットに変数にデータを格納できます。 –
もっと良い解決法を知っている人はいますか? –