套接字.Io:检查指定socket id的连接状态

Socket.io: check the status of a connection with the socket id

本文关键字:id 连接 状态 socket Io 检查 套接字      更新时间:2023-09-26

我有一个连接的套接字id。我可以得到该连接的状态,在另一个的函数处理程序内?

像这样:

io.sockets.on('connection', function(socket) {
    /* having the socket id of *another* connection, I can
     * check its status here.
     */
    io.sockets[other_socket_id].status
}

有办法吗?

对于1.0以上的版本,请查看Karan Kapoor的答案。对于旧版本,您可以使用io.sockets.sockets[a_socket_id]访问任何已连接的套接字,因此如果您在其上设置了状态变量,则io.sockets.sockets[a_socket_id].status将工作。

首先你应该检查套接字是否真的存在,它也可以用来检查连接/断开状态。

if(io.sockets.sockets[a_socket_id]!=undefined){
  console.log(io.sockets.sockets[a_socket_id]); 
}else{
  console.log("Socket not connected");
}

截至今天,2015年2月,这里列出的方法都不能在当前版本的Socket上工作。io(1.1.0)。所以在这个版本中,它是这样为我工作的:

var socketList = io.sockets.server.eio.clients;
            if (socketList[user.socketid] === undefined){

io.sockets.server.eio.clients是一个包含所有活动套接字id列表的数组。因此,使用if语句中的代码来检查特定的套接字ID是否在此列表中。

if (io.sockets.connected[socketID]) { 
    // do what you want 
}

插座。io>= 1.0,如Riwels回答的,首先你应该检查套接字是否存在

if(io.sockets.connected[a_socket_id]!=undefined){
    console.log(io.sockets.connected[a_socket_id].connected); //or disconected property
}else{
    console.log("Socket not connected");
}

在较新的版本中,您可以检查socket.connected属性。

var socket = io(myEndpoint)
console.log(socket.connected) // logs true or false

也可以设置timeout

setTimeout(function() {
    if(! socket.connected) {
        throw new Error('some error')
    }
}, 5000)

检查套接字是否在5秒内连接。