【问题标题】:Emitting event to clients during server shutdown in nodejs and socket.io在 nodejs 和 socket.io 中的服务器关闭期间向客户端发送事件
【发布时间】:2018-07-31 08:29:14
【问题描述】:

我正在为客户端服务器功能开发 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);
});

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

【问题讨论】:

  • 首先在文件中声明了io?如果是这样,您不应该使用io.sockets.emit,而是使用io.emit - 我相信您确实应该使用套接字实例,然后调用socket.broadcast.emit,它将发送到除发送者之外的所有连接的客户端
  • 感谢您的回复。我已经用声明部分编辑了我的问题。我能够在相同的代码中发出和接收事件,但它不能在关闭功能中工作,如代码所示。 process.on() 有什么限制吗?

标签: node.js socket.io


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我试过使用 process.nextTick() 但它仍然没有在另一边收到。
猜你喜欢
  • 2014-11-22
  • 2019-03-15
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2013-09-09
  • 2019-04-23
相关资源
最近更新 更多