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

Chi*_*tan 5 websocket node.js

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

jfr*_*d00 8

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

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

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

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

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