【问题标题】:Best way to add an event listener on socket.io to save resources在 socket.io 上添加事件侦听器以节省资源的最佳方法
【发布时间】:2021-01-21 18:43:46
【问题描述】:

所以我想知道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 node.js memory-management socket.io event-handling


    【解决方案1】:

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

    const a = () => {};
    const b = () => {};
    const c = a;
    
    console.log(a === b); // false
    console.log(a === c); // true
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2020-06-29
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多