更新代码或重启进程或热插拔代码时是否可以维护套接字连接?
我正在考虑我正在研究的下一代分布式服务器应用程序(目前用node.js编写),并且我希望能够保持tcp套接字打开,只要服务器和服务器远程客户端具有网络连接,即使更新服务器代码或特定实例重新启动或消失。
以下任何一种可能吗?
我应该查看哪些参考资料?在我看来,Erlang是该系统未来版本的一个很好的候选者,但我还没有将它用于除玩具示例之外的其他任何东西。
编辑:在linux上运行
答案 0 :(得分:3)
修改:修正拼写错误。
嗯,你没有提到它运行的平台,所以我将假设Linux / Unix。至少有两种方法可以做到这一点。
向应用发送一个信号,意思是“分叉并执行你的新手”。新的自我继承了套接字。
您应该能够通过unix-pipes传递套接字fds。您可以使用一些最小的管家应用程序,它会向app-v1发送信号以将套接字转储到预定义的管道,完成后将其终止然后启动app-v2并再次通过unix-pipe将其传递给套接字。
< / LI> 醇>答案 1 :(得分:1)
我的头脑中有两个想法,
使用标准接口
在dll中编译代码,这样您就可以在软件更新发生时加载和卸载实际的dll。
答案 2 :(得分:1)
是的,在Erlang中可以根据新版本交换代码并转换内部状态数据结构。简而言之:你必须实现转换函数,并在加载新版本的代码后同步调用它(你不会丢失连接,但当然,你需要稍等一下才能完成转换)。此功能在provided中可靠OTP(例如,如果您使用gen_server
,则可以实现功能code_change
)