是否可以重新启动Node.js服务器上连接的websockets?

时间:2016-12-12 14:39:04

标签: node.js websocket

使用任何技术,是否可以在重新启动Node.js服务器时保持websocket连接?

1 个答案:

答案 0 :(得分:7)

不,不是直接的。按照设计,操作系统会在该进程关闭时清除进程拥有的所有资源。这是操作系统在进程启动和关闭时防止资源泄漏的方式。因此,当您的服务器进程关闭时,它仍然打开的任何套接字都将被操作系统关闭。

通常的设计解决方案是编写客户端,如果客户端不打算丢失连接,则会在失去webSocket连接时自动重新连接。出于这个原因,这种类型的自动重新连接行为内置在socket.io(位于webSocket之上的一个层)中。

如果在服务器前插入代理,配置为客户端连接到代理,然后代理连接到服务器,则可以教代理自动重新连接到服务器客户端不会发生任何事情的方式(只要他们在服务器关闭时没有尝试发送消息)。当然,您的代理服务器具有相同的重启问题。

在某些操作系统中,可以将TCP套接字的所有权从同一主机上的一个进程转移到另一个进程。所以,我可以设想一个方案(我没试过),你可以启动一个临时进程,将所有webSocket套接字从服务器传输到这个临时进程,然后重新启动服务器,然后在新的服务器实例出现之后,转回套接字然后杀死临时进程。

由于webSocket可能无意中断开连接还有其他多种原因,我认为客户端重新连接是一个解决方案,它既包括服务器重启,也包括系统中可能发生的许多其他潜在问题以及代码已经存在的问题。写了。