【发布时间】:2011-01-13 11:57:38
【问题描述】:
虽然这个问题被标记为 EventMachine,但任何语言的通用 BSD-socket 解决方案都非常受欢迎。
一些背景:
我有一个应用程序正在侦听 TCP 套接字。它使用常规 System V 风格的初始化脚本启动和关闭。
我的问题是它需要一些时间才能准备好为 TCP 套接字提供服务。这不是太长,也许只有 5 秒,但在工作日需要重新启动时,这 5 秒太长了。现有连接保持打开并正常完成也很重要。
重新启动应用程序的原因是补丁、升级等。不幸的是,我发现自己每隔一段时间就需要在生产中做这种事情。
问题:
我正在寻找一种方法来将 TCP 侦听套接字从一个进程巧妙地切换到另一个进程,从而只获得一瞬间的停机时间。我希望现有的连接/套接字保持打开状态并在旧进程中完成处理,而新进程开始为新的连接提供服务。
是否有一些经过验证的方法可以使用 BSD-sockets 做到这一点? (EventMachine 解决方案的奖励积分。)
是否有开源库可以实现这一点,我可以按原样使用,或者用作参考? (同样,非 Ruby 和非 EventMachine 解决方案也值得赞赏!)
【问题讨论】:
-
如果您使用的是普通的简式套接字并且需要 5 秒才能启动,那么您做错了。返回的 accept() 和套接字上可用的数据之间的时间非常短。
-
不不,这只是我的应用程序在做其他杂项。启动。为 ORM 设置 ActiveRecord,进行一些初始查询等。我知道普通的套接字调用很快,这就是为什么我想在我的应用程序准备好时使用它们进行快速切换。
标签: sockets high-availability eventmachine