每隔x秒将websocket发送到客户端

时间:2017-11-05 23:40:14

标签: node.js reactjs websocket

如何每X秒发送一次websocket流?

可以从Node控制台中的additionalSocket查看数据的设置:

io.on('connection', (client) => {
  client.on('subscribe', (interval) => {

    additionalSocket.on('message', (data) => {
      console.log('data', data)
    }) 

    setInterval(() => {
      client.emit('timer', new Date())
    }, interval)
  })
});

设置setInterval在additionalSocket事件中的位置,但“忽略”间隔

io.on('connection', (client) => {
  client.on('subscribe', (interval) => {

    additionalSocket.on('message', (data) => {
      console.log('data', data)
      setInterval(() => {
        client.emit('data', data)
      }, interval)
    })       
  })
});

设置let未定义并将undefined发送到客户端

我知道这里存在一个上下文问题,因为additionalSocket.on中的闭包回调无法访问外部作用域。

io.on('connection', (client) => {
  client.on('subscribe', (interval) => {

    let stream 
    additionalSocket.on('message', (data) => {
      stream = data
    })  

    setInterval(() => {
      client.emit('stream', stream)
    }, interval)     
  })
});

此服务器位于节点中,客户端位于React中。 的谢谢!

1 个答案:

答案 0 :(得分:0)

通过使用setTimeout,可以在对setInterval的调用中看到outerVar的值。现在我可以每隔x秒将websockets流数据发起的服务器端传递给客户端。

  let outerVar
  setTimeout(() => {
    websocket.on('message', (data) => {
      outerVar = data;
    })
  }, 0)

  setInterval(() => {
    console.log('outerVar', outerVar);
    client.emit('timer', outerVar)
  }, 3000)