私は、socket.io を使用して node.js サーバーを介して何らかの通信を行う単純な Web アプリケーションを作成しました。
ユーザーが接続すると、ノードはクライアントに特定のイベントをサブスクライブするように指示する情報を返します。それはうまくいきます。
しかし、ブラウザーをアイドル状態にすると、クライアントはイベントを 2 回サブスクライブすることになります。サブスクリプション プロセスは次のように機能します。
ユーザーが node.js に接続すると、「adduser」メッセージが表示されます
その関数で発生する 2 つの重要な事柄は次のとおりです。
socket.on('adduser', function(data)
<snip>
socket.emit('nodeinfo', {node_id: NODE_ID});
socket.emit('update', {msg: 'you are connected'});
socket.emit('nodeinfo') は、イベントをサブスクライブするようにクライアントに通知します。
したがって、クライアントは
socket.on('nodeinfo', function(data) { ... }
問題は、「接続されています」と 2 回言うことはなく、「adduser」の console.log() 関数がノード側で再度呼び出されることはありません。発生しているように見える唯一のことは、node.js が nodeinfo を再度発行する (またはクライアントがそう考える) ことで、クライアントが再サブスクライブします。
socket.io での再接続がどのように機能し、これがどのように発生するかを誰かに説明してもらえますか?