如何解决如何在不丢失数据的情况下更新nodejs应用
我有一个nodejs数据应用程序,它从远程api收集数据,大约需要一个星期才能获得完整的当前数据集。
数据通过网络套接字到达,每隔几毫秒数据包到达一次。 处理完这些数据后,即可通过应用程序中的Websocket服务器使用它。
如果我现在需要更新该应用程序,它将关闭一周,因为如上所述,它首先需要重新创建数据集。
为了减轻这种情况,我尝试使用PM2启动该应用程序的2个实例,每个服务器侦听不同的端口,并且在更新之前,关闭的端口将向其客户端发送一条消息,告知他们客户端应开始侦听其他端口端口。
但是,当客户端更改端口时,我收到一条404消息,说明握手有问题。如果我尝试使用任一端口,而只有一个服务器应用程序单独运行,则每个端口都可以工作。
另外,如果我尝试连接到第二个端口-不先连接到第一个端口-如果我有两个正在运行的服务器应用程序,则第二个端口也将提供404。
我该如何解决这个问题。
服务器代码:
// create a websocket server listening on port PORT
let server = app.listen(
PORT,console.log(
`Websocket server running in ${process.env.NODE_ENV} mode on port ${PORT}`
)
);
server.on("error",() => {
server = app.listen(
PORT_2ND,console.log(
`Websocket server running in ${process.env.NODE_ENV} mode on port ${PORT_2ND}`
)
);
});
客户端:
async initWs(port = 3010) {
const ws = new ReconnectingWebSocket(`ws://xxx.kk:${port}`);
ws.onmessage = e => {
let data = JSON.parse(e.data);
this.handleMessage(data);
};
//...
}
async handleMessage(data){
if (data.method === "stop") {
const port = this.currentWSPort === 3000 ? 3010 : 3000;
ws.close();
await this.delay(500);
initWs(port);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。