当我加入一个房间并发送消息时,它只会发送一次,但是如果我离开房间并重新加入同一房间,它将发送两次相同的消息。该消息重复了我离开/加入房间的次数。我正确地离开了房间,因为离开房间后我不再收到消息。

io.on('connect', socket => {
  console.log('New client connected')

  socket.on('removeRoom', room => {
    socket.leave(room)
    socket.to(room).emit(room + '-newMessage', 'user has left room')
  })

  socket.on('joinRoom', room => {
    socket.join(room)

    socket.on(room + '-newMessage', data => {
      io.sockets.in(room).emit('recieveMessage', data)
    })
  })

  socket.on('disconnect', () => {
    console.log('user disconnected')
  })
})

最佳答案

离开会议室并不会取消注册消息的回调,而只是防止触发回调。当您重新加入会议室时,会注册另一个回调,从而导致发送N条消息。

最简单的解决方案是删除“ removeRoom”上的“ newMessage”侦听器。

socket.on('removeRoom', room => {
  socket.leave(room)
  socket.removeAllListeners(room + '-newMessage');
  socket.to(room).emit(room + '-newMessage', 'user has left room')
})

关于javascript - 当N次加入 session 室时socket.io发送N条消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52615706/

10-12 20:40