9

我有一个连接的套接字 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
}

有没有办法这样做?

4

5 回答 5

16

对于高于 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");
}
于 2013-05-23T15:18:45.760 回答
6

截至今天,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 是否在此列表中。

于 2015-02-19T06:38:35.260 回答
2
if (io.sockets.connected[socketID]) { 
    // do what you want 
}
于 2015-07-07T18:38:30.580 回答
1

Socket.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");
}
于 2014-10-30T03:54:04.287 回答
1

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

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

你也可以设置超时

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

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

于 2016-09-16T08:27:58.497 回答