在70-80个连接后,我的nodejs不会向用户发送响应
app.use(passport.initialize());
app.use(passport.session());
socketIo.on('connection',async(socket) => {
socket.handshake.session.save((err)=> {if(err)return err;});
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
socket.on('disconnect', () => {
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
})
await UserController(<any>socket)
})
app.get('/', (req,res) => {
res.sendFile(`${__dirname}/public/index.html`)
})
用户控制器是一个承诺,当用户断开时可以解决
断开连接的侦听器总是在建立新连接时创建的。
socketIo.on('connection',async(socket) => {
socket.handshake.session.save((err)=> {if(err)return err;});
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
socket.on('disconnect', () => { <--- Created everytime 'connection' event received
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
})
await UserController(<any>socket)
})
侦听器应该在其他侦听器之外创建:
socketIo.on('connection',async(socket) => {
socket.handshake.session.save((err)=> {if(err)return err;});
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
await UserController(<any>socket)
})
socket.on('disconnect', () => {
socketIo.emit('site online', Object.keys(socketIo.sockets.sockets).length)
})
这一切都是异步发生的,所以您只需并行创建两个侦听器。对于您的代码,如果您有80个连接,那么您也有80个断开连接的侦听器。我想这可能会引起一些问题。