C 在部署新代码或热插拔代码时维护套接字连接?

C 在部署新代码或热插拔代码时维护套接字连接?,c,node.js,sockets,erlang,distributed-computing,C,Node.js,Sockets,Erlang,Distributed Computing,在更新代码或重新启动进程或热交换代码时,是否可以保持套接字连接 我正在考虑我正在开发的下一代分布式服务器应用程序(目前是用node.js编写的),我希望能够在服务器和远程客户端有网络连接的情况下保持tcp套接字打开,即使在服务器代码更新或特定实例重新启动或消失时也是如此 是否有以下任何一种可能 在代码重新启动之前,它存储套接字信息,而远程端保持打开状态。看起来这在C语言中是完全可行的 在代码重新启动之前,它会将套接字信息发送到另一个实例或进程 在Erlang的情况下,如果一段特定的代码是热交换

在更新代码或重新启动进程或热交换代码时,是否可以保持套接字连接

我正在考虑我正在开发的下一代分布式服务器应用程序(目前是用node.js编写的),我希望能够在服务器和远程客户端有网络连接的情况下保持tcp套接字打开,即使在服务器代码更新或特定实例重新启动或消失时也是如此

是否有以下任何一种可能

  • 在代码重新启动之前,它存储套接字信息,而远程端保持打开状态。看起来这在C语言中是完全可行的
  • 在代码重新启动之前,它会将套接字信息发送到另一个实例或进程
  • 在Erlang的情况下,如果一段特定的代码是热交换的,那么数据结构和连接不会受到干扰吗
  • 在一些元组空间中分布套接字。我对此一无所知,但至少听起来很有趣
有什么我应该看的参考资料吗?在我看来,Erlang是这个系统未来版本的一个很好的候选者,但除了玩具示例之外,我没有使用过它


编辑:在linux上运行

我脑子里有两个想法

  • 使用标准接口在单独的进程中实现套接字处理程序

  • 在DLL中编译代码,这样您可以在软件更新时加载和卸载实际的DLL


  • 我脑子里有两个想法

  • 使用标准接口在单独的进程中实现套接字处理程序

  • 在DLL中编译代码,这样您可以在软件更新时加载和卸载实际的DLL

  • 编辑:修正打字错误

    您没有提到这是在哪个平台上运行的,所以我假设是Linux/Unix。至少有两种方法可以做到这一点

  • 向应用程序发送一个信号,意思是“fork and exec your newer self”。新self继承套接字

  • 您应该能够通过unix管道传递套接字fds。您可以使用一些最小的steward应用程序,它将向app-v1发送一个信号,将套接字转储到预定义的管道,完成后将其杀死,然后启动app-v2,并通过unix管道再次将套接字传递给它

  • 编辑:修正打字错误

    您没有提到这是在哪个平台上运行的,所以我假设是Linux/Unix。至少有两种方法可以做到这一点

  • 向应用程序发送一个信号,意思是“fork and exec your newer self”。新self继承套接字

  • 您应该能够通过unix管道传递套接字fds。您可以使用一些最小的steward应用程序,它将向app-v1发送一个信号,将套接字转储到预定义的管道,完成后将其杀死,然后启动app-v2,并通过unix管道再次将套接字传递给它


  • 是的,在Erlang中,可以根据新版本交换代码和转换内部状态数据结构。简而言之:您必须实现转换函数,并在加载新版本的代码后同步调用它(您不会丢失连接,但当然,您需要等待转换完成)。此功能在中是可靠的(例如,如果您正在使用您可以实现的功能)

    是的,在Erlang中可以根据新版本交换代码和转换内部状态数据结构。简而言之:您必须实现转换函数,并在加载新版本的代码后同步调用它(您不会丢失连接,但当然,您需要等待转换完成)。此功能在(例如,如果您正在使用you may Implementation function)中是可靠的。

    如果远程端保持打开状态,该端点检测到EOF/-1或因此断开连接的可能性有多大?目前为100%。内置节点tcp服务器在终止连接时终止连接。另一方面,客户端在终止时不发送EOF/-1(但它们是嵌入式硬件w/C固件)。固件原则上可以忽略EOF/-1。如果远程端保持打开状态,该端点检测到EOF/-1或因此断开连接的可能性有多大?目前为100%。内置节点tcp服务器在终止连接时终止连接。另一方面,客户端在终止时不发送EOF/-1(但它们是嵌入式硬件w/C固件)。固件原则上可以忽略EOF/-1。