【问题标题】:Socket emits data to often to the clientSocket 经常向客户端发送数据
【发布时间】:2020-10-12 10:26:22
【问题描述】:

以下方式使用socket-io时,客户端获取数据过于频繁。

Server.js

socket.on('rcn-scd-fiv', () => {
    rcdvsf.get('rcn-scd-db').then((data) =>{
      socket.emit('int-con', data)
    })
    console.log('data given to', socket.id)
    
  })

client.js:

socket.emit('rcn-scd-fiv')
    socket.on('int-con', data => {
      // The data is logged 18 times to the console
      console.log(data.rcdvsf)
      setRooms(data.rcdvsf)
    })

控制台

【问题讨论】:

  • 您的控制台列表不可见。我建议您将更多日志记录放在两端的控制台中,而不仅仅是在事件处理程序中。还有,setRooms 是做什么的?
  • 在客户端,如果您在每次运行该部分代码时为“int-con”注册处理程序 - 即每次运行 socket.emit(',...') - 那么您正在添加一个新的每次处理程序。因此,添加的每个处理程序将针对单个接收到的消息运行,因此客户端可能有 18 个处理程序。
  • JohnRC 那么我该如何解决这个问题呢?我们不允许使用 xhr 的。
  • @JohnRC 这段代码只运行一次

标签: javascript node.js websocket socket.io


【解决方案1】:

原来我必须使用useEffect()。这样函数只会被调用一次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2013-02-01
    • 2017-05-07
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多