我有一个连接的套接字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
}
有办法吗?
答案 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秒内连接。