Socket.io:检查与套接字ID的连接状态

时间:2013-05-23 12:06:27

标签: javascript node.js socket.io

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

有办法吗?

5 个答案:

答案 0 :(得分:14)

对于高于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");
}

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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");
}

答案 3 :(得分:2)

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

答案 4 :(得分:0)

在较新的版本中,您可以检查CREATE TABLE `res` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text, `start` datetime DEFAULT NULL, `end` datetime DEFAULT NULL, `room_id` int(11) DEFAULT NULL, `status` varchar(30) DEFAULT NULL, `paid` int(11) DEFAULT NULL, `customer` varchar(50) DEFAULT NULL, `name_ship` varchar(50) DEFAULT NULL, `equipment` text, `port` varchar(30) DEFAULT NULL, `ETA` datetime DEFAULT NULL, `ETD` datetime DEFAULT NULL, `service_id` int(11) NOT NULL, `service_classification` varchar(30) DEFAULT NULL, `partners_id` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5392 DEFAULT CHARSET=latin1 属性。

socket.connected

您也可以设置超时

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

这将检查插座是否在5秒内连接。