首页 > 解决方案 > 在 nodejs 和 socket.io 中的服务器关闭期间向客户端发送事件

问题描述

我正在使用 nodejs 来实现客户端服务器功能,并使用 socket.io 来发送和接收事件。我能够在我的代码中发出和接收事件,但在进程关闭期间发出和接收事件时遇到问题。我想在服务器(nodejs)关闭期间向所有客户端发出一个事件。我正在这样使用它

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);                                                                                                              

process.on('SIGINT', shutdown);

function shutdown() {
  console.log('Inside shutdown server');
  //io.emit('shutdown', 'Server is going DOWN');
  io.sockets.emit('shutdown', 'Server is going DOWN');
  server.close(function () {
    console.log('closed express');   
  });    
  process.exit(0);
} 

但是另一端没有收到关机事件。我在这里有什么遗漏吗?

接收端代码:(nodejs)

socket.on('shutdown', function(msg) {
    console.log('inside shutdown ' + msg);
});

请帮我解决这个问题。提前致谢...

标签: node.jssocket.io

解决方案


显然,在下一个 tick中处理发送消息,因此您必须将调用推迟process.exit(0)到下一个事件循环迭代:

function shutdown() {
  // ...
  process.nextTick(() => {
    process.exit(0);
  })
}

推荐阅读