、クライアントAはclientBのsocket.id
を持っており、クライアントAはclientBが現在接続しているかどうかを知りたいです。 socket.id
は単なる文字列値なので、clientBが接続されているかどうかをclientAがちょうどsocket.id
から通知する方法はありません。その情報はサーバーから取得する必要があります。
クライアントBは、(クライアントBのsocket.idをリクエストメッセージでサーバーに送信することによって)クライアントBが接続されていると思う場合、サーバーに問い合わせることができ、サーバーはクライアントBの接続状態に関する情報で応答できます。
サーバーは、接続されているすべてのクライアントの一覧を保持しています。そのリストにアクセスできる方法の1つは、socket.id
によってインデックスされたマップを使用する方法です。したがって、接続されたクライアントが指定されたsocket.idを持つマップにあるかどうかをサーバーが簡単に確認できます。
ここでは、指定されたsocket.idが接続されているかどうかをサーバーに問い合わせる方法があります。クライアントが要求を送信し、応答を聞くなり、
io.sockets.on('connection', function (socket) {
console.log("LOG: just connected: " + socket.id);
socket.emit('id', socket.id);
socket.on('disconnect', function() {
console.log("LOG: just disconnected: " + socket.id)
})
// use the ack function argument to send a response back
socket.on('isConnected', function(id, ackFn) {
let otherSocket = io.sockets.connected[id];
ackFn(!!otherSocket && otherSocket.connected);
});
});
そして:これは、サーバーのコードになりますが、どのようにクライアントをすることができます求めていたと思っ
socket.emit('isConnected', someId, function(result) {
console.log(someId + ": " + result ? "is connected" : "is not connected");
});
オリジナルの答え独自のソケットが接続されているかどうかを確認します。
socket.ioオブジェクトには、ソケットの現在の接続状態を反映する.connected
プロパティがあります。
if (socket.connected) {
// socket.io thinks it is still connected
}
あなたはそれがここinternally in the .emit()
method使用されて見ることができます:接続が機能停止したとき、それは通常、気づくよう
if (this.connected) {
this.packet(packet);
} else {
this.sendBuffer.push(packet);
}
Socket.ioは、すでにサーバからクライアントに送信され、自身のハートビートを実装しています。デフォルトでは再接続を試みますが、再接続がすぐに機能しない場合、ソケットは切断された状態のままで、再接続を再試行します。
私はソケットオブジェクトではなくソケットIDを持っているだけですか? – SoftTimur
@SoftTimur - 'socket.id'はサーバー側のものですが、コードはクライアントサイドです。私は非常に混乱しています。このフラグを使用するには、クライアント側の 'socket'オブジェクトを取得する必要があります。さらなるヘルプが必要な場合は、より多くのコードを表示する必要があります。あなたが尋ねた特定の質問に私は答えました。あなたが今求めているのは何か他のものです。あなたが他のクライアントの 'socket.id'を持っていて、そのクライアントが接続されているかどうかを知りたければ、それはまったく異なる質問です。新しい質問を始めて、あなたがしようとしていることをすべて説明する関連するコード。 – jfriend00
私の最初の質問は** id **についてです、それは確かにサーバー側からです。私はサーバーに接続状態を確認するように要求すべきではないと言っているわけではありません。私は自分のPCを持っているときにもっとコードを表示します。 – SoftTimur