0

似乎 socket.io 无法发送已连接用户的列表,如下所示:

socket.emit('users', sIo.sockets.clients());

它给了我以下错误:

/Users/enrico/Desktop/helloExpress/node_modules/socket.io/lib/parser.js:75
data = JSON.stringify(ev);
              ^
TypeError: Converting circular structure to JSON

显然它不能对 sIo.sockets.clients() 的返回值进行字符串化有关如何解决此问题的任何想法?提前致谢。

4

1 回答 1

0

由于问题是circular reference没有真正的“解决它”。循环引用是指结构中的某个对象指向该对象的另一部分,形成一个无限循环。你能做的就是这样。

var returnList = [];
var clients = sIo.sockets.clients(); // grab list of clients, assuming its an array
for(var i = 0; i < clients.length; i++) {
  var client = clients[i]; // next client in array

  // push values into return list
  returnList.push({
    name: client.name,
    someOther: client.value,
    another: client.thing
  });
}

// emit cleaned up list
socket.emit('users', returnList);

使用此代码,您可以挑选您想要的值并仅发送这些值。由于其他几个原因,这很好。由于此客户端列表可能是内部实现,因此也可能发送有关其他客户端连接的信息。

这也很投机,因为我不是 100% 你正在使用什么库,看起来像 Socket.IO 但我找不到任何socket.clients()方法。

于 2013-08-01T20:28:01.397 回答