当我加入房间并发送消息时,它只发送一次,但如果我离开房间并重新加入同一个房间,它会发送相同的消息两次。该消息会随着我离开/加入房间的次数而重复。我正在正确地离开房间,因为离开房间后我不再收到消息。
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 - socket.io 加入房间 N 次时发送 IN 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615706/