我有一个连接的套接字 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
}
有没有办法这样做?
我有一个连接的套接字 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
}
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");
}
在较新的版本中,您可以检查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 秒内连接。