问题描述
我有一个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 (将#修改为@)