虽然这个问题被标记为 EventMachine,但任何语言的通用 BSD-socket 解决方案也非常受欢迎。
一些背景:
我有一个监听 TCP 套接字的应用程序。它使用常规的 System V 风格的初始化脚本启动和关闭。
我的问题是它需要一些时间才能准备好为 TCP 套接字提供服务。这不是太长,也许只有 5 秒,但在工作日需要重新启动时,这 5 秒太长了。现有连接保持打开并正常完成也很重要。
重新启动应用程序的原因是补丁、升级等。不幸的是,我发现自己每隔一段时间就需要在生产中做这种事情。
问题:
我正在寻找一种方法来巧妙地将 TCP 侦听套接字从一个进程切换到另一个进程,因此只能获得一瞬间的停机时间。我希望现有的连接/套接字保持打开并在旧进程中完成处理,而新进程开始为新的连接提供服务。
是否有一些使用 BSD 套接字的行之有效的方法?(EventMachine 解决方案的奖励积分。)
是否有开源库可以实现这一点,我可以按原样使用或用作参考?(同样,非 Ruby 和非 EventMachine 解决方案也很受欢迎!)