服务器关闭时触发事件(NodeJS)
Trigger Event On Server Shutdown (NodeJS)
众所周知,当您更新nodejs文件并将其上传到服务器时,它需要重新启动才能应用——但如果您使用类似nodemon
的东西,它会自动重新启动服务器,则登录的客户端需要刷新屏幕。
所以我想知道,当我的服务器宕机/重新启动时,有没有办法触发"注销",这样它至少只刷新客户端,让他们知道发生了什么?
就目前情况来看,他们会因为会话丢失而广播未定义的错误吗?
我尝试使用一个名为authenticate
的函数进行验证
function authenticate(req,res,next) {
if (!req.session.loggedIn) {
fs.readFile('./html/login.html', "utf8", function(err, html) {
res.send(html);
});
} else next();
}
下面是我如何调用函数:
app.io.route('move', authenticate, function(req) {
但是我的服务器崩溃了,因为当时参数是未定义的。
基本上将其视为onbeforeunload
事件,而不是浏览器,而是服务器。
我要采取的方法是让Socket.IO通知所有连接的客户端您的服务器正在执行重新启动,一旦收到此重新启动通知,客户端将断开套接字并轮询服务器是否恢复。一旦它恢复,你可以进行硬刷新或软刷新。
Server Server
SIGINT/Exit received --> io.broadcast("server:restart") --
Client Client
-> receive "server:restart" --> disconnect socket, poll for server back up --
Client
-> load refreshed data
您可以捕获一些信号事件,如这里所示,并根据这里的一些信息使用"退出"事件。
process.on("exit", function() {
app.io.sockets.emit("server:shutdown");
});
只有当发射过程是同步的(看起来可能是同步的),这才会起作用。这意味着你不能得到一个回调,你只能广播消息,让客户端做剩下的事情
如果你想"硬刷新",你可以轮询一个"心跳"路由,该路由只返回服务器是否良好(显然是正在运行),然后执行location.reload()
调用。对于软刷新,请ping返回新页面内容的路由,然后进行页面交换($("body").html(response)
)。
相关文章:
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- 在Nodejs中堆叠异步回调事件的最佳方式
- 在NodeJS中使用类函数作为事件侦听器
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- Nodejs事件多次触发
- NodeJS中的事件,事件正在setInterval内发出,但不能没有setInterval
- nodeJS 等待无法承诺的事件
- 是否可以在 NodeJS 中模拟键盘/鼠标事件
- 当事件发生时调用nodejs中的函数
- NodeJS&Socket.IO:发出请求事件并获取响应,我应该在何时/何地绑定侦听器
- 如何在 nodejs 中维护事件循环中的持久数据
- NodeJS如何将onchange事件添加到字符串中
- 使用 on nodejs 从另一个模块捕获事件
- NodeJS + SocketIO 大套接字事件管理
- “事件发射器内存泄漏”发生,尽管使用了最新版本的nodejs
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- Nodejs正在侦听来自http.get()的数据事件的响应流
- 在nodejs express模块中处理所有事件之前发送响应
- 服务器关闭时触发事件(NodeJS)
- RxJS对已发出的事件nodejs进行分组