Home > Software design >  Close express server when client emits to server with Socket.io
Close express server when client emits to server with Socket.io

Time:10-03

Goal: close server when client emits message.
I can confirm client sends response as it logs: 'hit server

Server code for express is:

io.on('connection', (socket) => {
  console.log('this is connected');
  socket.on('message', function(data){
    console.log('hit server');
    server.close();
  })

});

io.on('error', function() {
  console.log('there is an error');
})

server.listen(3000, () => {
  console.log('listen on *:3000');
});

CodePudding user response:

To stop an Express server that you're using socket.io with, you first call:

server.close();

That stops it from accepting new http connections. You can then iterate existing socket.io connections and close each of them:

const sockets = await io.fetchSockets();
for (let socket of sockets) {
    socket.disconnect(true);
}

This could, in theory, leave a few regular http connections that are still in process, but will eventually complete or timeout.

server.getConnections(callback)

will tell you if there are any more outstanding connections or not.


If you just want to shut everything down, including your app, you can call:

process.exit()
  • Related