7

私は、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 での再接続がどのように機能し、これがどのように発生するかを誰かに説明してもらえますか?

4

1 に答える 1

4

デフォルトでは、クライアントは切断後に再接続を試みます。これは、必要に応じて変更できます: socket.io クライアント

再接続された場合、サーバーは新しい接続を認識し、以前の接続と新しい接続を識別するロジックを実装する必要があります。したがって、実際には、「接続」時に adduser ロジックを実装する代わりに、クライアントがサーバーに情報を送信した後に実行します (または実行しません)。

于 2012-03-13T04:56:06.073 に答える