1

我正在使用 Node.js 服务器上的 npm ws 库。我正在查看文档并找到了一种遍历客户端的方法,例如,向使用该wss.clients对象的每个人发送消息:

const WebSocket = require('ws');
const wss = new WebSocket.server({ port:8080 });
//...
wss.clients.forEach(client => {
  client.send("A message to you!");
});

我最初认为这wss.clients是一个数组,因为它让我可以使用数组原型遍历它forEach(),但是当我尝试wss.clients.find()在它上运行以仅向特定连接发送消息时,出现错误:

TypeError: wss.clients.find is not a function

我跑console.log(Array.isArray(wss.clients))它说的。当我尝试时console.log(wss.clients),我得到一个看起来像这样的对象:

Set { WebSocket { ... } }

所以,我的问题是,wss.clients 对象如何能够运行数组原型forEach()?它在没有使用Object.keys()或任何东西的情况下工作。wss.clients.pop()出于好奇,我也尝试过,它给出了另一种类型的错误。

究竟是wss.clients什么?对象还是数组?

4

1 回答 1

1

我发现(感谢@waiaan)类型wss.clientsSet。集合与数组有不同的方法,但它们是相似的。

Set.prototype.find() 的最佳实现是定义这样的方法:

Set.prototype.find = function(cb) {
    for (const e of this) {
        if (cb(e)) {
            return e;
        }
    }
}

本文中有关数组和集合的更多信息。

于 2020-05-29T04:26:56.793 回答