Javascript 如何在不丢失数据的情况下更新nodejs应用程序
我有一个nodejs数据应用程序,它收集来自远程api的数据,大约需要一周的时间才能获得完整的当前数据集 数据通过websocket到达,每隔几毫秒就有一个数据包到达。 在处理这些数据之后,它将通过应用程序中的websocket服务器提供 如果我现在需要更新应用程序,它将关闭一周,因为它首先需要重新创建数据集,如上所述 为了缓解这种情况,我尝试启动两个应用程序实例,其中PM2每个服务器侦听不同的端口,在更新之前,正在关闭的端口将向其客户端发送一条消息,要求它们开始侦听另一个端口 然而,当客户端更改端口时,我收到一条404消息,说明握手有问题。如果我尝试任何一个端口,并且只有一个服务器应用程序分别运行每个端口,则每个端口都可以工作 另外,如果我尝试连接到第二个端口(而不是先连接到第一个端口),如果我有两个服务器应用程序正在运行,那么第二个端口也将提供404 我怎样才能解决这个问题 服务器代码:Javascript 如何在不丢失数据的情况下更新nodejs应用程序,javascript,node.js,pm2,Javascript,Node.js,Pm2,我有一个nodejs数据应用程序,它收集来自远程api的数据,大约需要一周的时间才能获得完整的当前数据集 数据通过websocket到达,每隔几毫秒就有一个数据包到达。 在处理这些数据之后,它将通过应用程序中的websocket服务器提供 如果我现在需要更新应用程序,它将关闭一周,因为它首先需要重新创建数据集,如上所述 为了缓解这种情况,我尝试启动两个应用程序实例,其中PM2每个服务器侦听不同的端口,在更新之前,正在关闭的端口将向其客户端发送一条消息,要求它们开始侦听另一个端口 然而,当客户端更
// 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);
}