gpt4 book ai didi

javascript - Socket.IO 获取连接的客户端列表

转载 作者:行者123 更新时间:2023-11-30 18:32:35 24 4
gpt4 key购买 nike

我费了好大劲才找到有关 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 数组 as defined by this method :

/**
* 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) where 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 - Socket.IO 获取连接的客户端列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9188463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com