Socket.IO获取连接的客户端列表
Socket.IO get connected clients list
我很难找到io.sockets.clients()
上的文档,这样我就可以检索连接的客户端id、用户名等。当我alert(io.sockets.clients().length.toString());
时,它会给我正确的数字,但我需要找到数组的结构。有没有一种方法可以让我在不知道结构的情况下计算出数组?很像php的print_r()
?
到目前为止的代码:
socket.on('switchRoom', function(newroom){
var clients = io.sockets.clients();
socket.emit('users', clients);
});
socket.on('users', function(usernames) {
for(var client in usernames) {
console.log(usernames[client].id + ' disconnected: ' + usernames[client].disconnected)
}
});
我在"switchRoom"启动后收到此错误
/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81
data = JSON.stringify(ev);
^
TypeError: Converting circular structure to JSON
at Object.stringify (native)
at Object.encodePacket (/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81:19)
at Socket.packet (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:202:21)
at Socket.emit (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:351:15)
at Socket.<anonymous> (/home/ed/socket/chat/app.js:58:10)
at Socket.$emit (events.js:64:17)
at SocketNamespace.handlePacket (/home/ed/socket/chat/node_modules/socket.io/lib/namespace.js:331:20)
at Manager.onClientMessage (/home/ed/socket/chat/node_modules/socket.io/lib/manager.js:436:38)
at WebSocket.onMessage (/home/ed/socket/chat/node_modules/socket.io/lib/transport.js:387:20)
at Parser.<anonymous> (/home/ed/socket/chat/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js:38:10)
您是在客户端(浏览器中)还是在服务器端执行此操作?您提到使用alert
,但我不知道客户端有clients()
方法可以满足您的需要。
在服务器端,clients()
返回由以下方法定义的Socket
的数组:
/**
* Retrieves all clients as Socket instances as an array.
*
* @api public
*/
SocketNamespace.prototype.clients = function (room) {
var room = this.name + (room !== undefined ?
'/' + room : '');
if (!this.manager.rooms[room]) {
return [];
}
return this.manager.rooms[room].map(function (id) {
return this.socket(id);
}, this);
};
Node.js控制台和带有开发工具的浏览器提供了一个允许调试的console
对象;一般来说,你可以调用console.log(something)
,其中something
几乎是任何东西;在对象的情况下,将以某种方式枚举对象的详细信息。
[编辑]
由于您已经在使用socket.set
来存储用户名,也许您可以尝试以下操作:
// server
socket.on('connection', function(socket) {
...
socket.on('disconnect', function() {
socket.get('username', function (err, name) {
socket.broadcast.emit('disconnected', name);
});
});
...
});
// client
socket.on('connect', function () {
...
socket.on('disconnected', function(name) {
console.log(name + " disconnected.");
});
...
});
相关文章:
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 客户端单选按钮列表验证
- 将列表<字符串>转换为客户端 ASP.NET MVC 上的 Json 数组
- 如何将添加到列表框客户端的值存储到sessionScope
- 下拉列表的 SelectedIndexChanged 事件在从客户端填充时不会触发
- 使用 javascript 在客户端的列表视图中选中所有复选框
- 从 asp.net 中的数据列表客户端查找单选按钮
- 断开连接时更新客户端中的用户列表
- Android原生应用程序:无法滚动浏览包含大约200个元素的整个列表(appium java客户端)
- NodeJS 发送所有客户端的列表都失败
- 使用 jquery 将客户端事件绑定到动态数据列表项
- 客户端对象模型调用context.executeQueryAsync:将项添加到列表后,在onQuerySuccesse
- 套接字 IO 房间:获取特定房间中的客户端列表
- 流星客户端异步模式 / 如何为订阅列表和回调实现 waitOn
- 检索客户端系统中安装的浏览器/代理的列表
- 如何在列表视图上循环(客户端禁用中的特定复选框)
- Socket.IO获取连接的客户端列表
- HTML5应用程序缓存,获取客户端中缓存文件的列表
- SharePoint客户端对象模型-如何读取多个网站中具有相同名称的列表
- 按值获取下拉列表/组合框的索引(客户端)