nodejs socket.io问题
socket.io 服务器端
socket.on('a', () => {
console.log('打开了五个socket.io客户端,并且emit("a"),这里会被调用六次')
socket.emit('b')
socket.emit('c')
})
socket.io 客户端
socket.on('b', () => {
console.log('这里会被调用一次')
socket.emit('a', { from: 'onB' })
})
socket.on('c', () => {
console.log('这里也会被调用六次,这里是正常的,因为on("a")被调用了六次')
console.log('c')
})
socket.emit('a', { id: `${Math.random()}`.slice(2) })
问题出在打开了五个socket.io客户端页面,在socket.emit('a')
的时候,console.log('c')
打印了6次。如何让只打印两次
在socket.io 服务器端新增lock
const lock = {}
socket.on('a', (info) => {
if (lock[info.id]) return;
lock[info.id] = true;
// 这里console.log(info)的时候info里面的${id}变成了true
// 但是ock[info.id]却一直是undefined,导致无法枷锁过滤掉其他四次的错误的调用
if (info.from === 'onB') socket.emit('b')
socket.emit('c')
})
期望socket.on('a')
执行两次,最终还是执行了四次,求解决方案