我有一个带有 socket.io 的快速应用程序,但是当我获得 70 个并发连接时,该网站不会发送响应



在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个断开连接的侦听器。我想这可能会引起一些问题。

最新更新