Javascript 如何在不丢失数据的情况下更新nodejs应用程序

Javascript 如何在不丢失数据的情况下更新nodejs应用程序,javascript,node.js,pm2,Javascript,Node.js,Pm2,我有一个nodejs数据应用程序,它收集来自远程api的数据,大约需要一周的时间才能获得完整的当前数据集 数据通过websocket到达,每隔几毫秒就有一个数据包到达。 在处理这些数据之后,它将通过应用程序中的websocket服务器提供 如果我现在需要更新应用程序,它将关闭一周,因为它首先需要重新创建数据集,如上所述 为了缓解这种情况,我尝试启动两个应用程序实例,其中PM2每个服务器侦听不同的端口,在更新之前,正在关闭的端口将向其客户端发送一条消息,要求它们开始侦听另一个端口 然而,当客户端更

我有一个nodejs数据应用程序,它收集来自远程api的数据,大约需要一周的时间才能获得完整的当前数据集

数据通过websocket到达,每隔几毫秒就有一个数据包到达。 在处理这些数据之后,它将通过应用程序中的websocket服务器提供

如果我现在需要更新应用程序,它将关闭一周,因为它首先需要重新创建数据集,如上所述

为了缓解这种情况,我尝试启动两个应用程序实例,其中PM2每个服务器侦听不同的端口,在更新之前,正在关闭的端口将向其客户端发送一条消息,要求它们开始侦听另一个端口

然而,当客户端更改端口时,我收到一条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);
}