在 socket.io 上添加事件侦听器以节省资源的最佳方式

Best way to add an event listener on socket.io to save resources

所以我想知道 javascript 如何处理函数。

如果我有这样的代码:

io.on("connection", function(socket) {
  socket.on("hi", function(data) {
    socket.emit("emit", "hey")
  })
})

在我看来,每个新连接 javascript 都会为“hi”事件创建另一个函数。所以我目前在我的应用程序中做的是这样的:

function hi(data) {
    this.emit("emit", "hey")
}

io.on("connection", function(socket) {
  socket.on("hi", hi)
})

这样 javascript 只会重用函数 hi 而不是实例化一个新函数??我不确定这是否有必要,但我想尽可能地消耗更少的资源,因为我正在考虑当服务器有数千个连接时会发生什么。

JavaScript 中的函数被视为对象,因此它们属于引用类型。我们可以通过像这样做一个简单的测试来判断:

const a = () => {};
const b = () => {};
const c = a;

console.log(a === b); // false
console.log(a === c); // true

无论何时在您的案例中创建新连接,都会将函数的引用作为回调传递,这意味着每个连接都将调用函数最初存储的同一内存地址。所以你的实现是正确的,你不必担心在这种情况下使用大量内存的可能性:-)