如何使用EventMachine区分Ctrl + C与常规解除绑定?

时间:2011-12-26 21:42:15

标签: ruby eventmachine

有没有一种很好的方法来区分我何时执行Ctrl + C手动关闭所有连接,以及客户端何时断开与我的服务器的连接?他们似乎都称之为unbind方法。

当我使用Ctrl + C手动关闭时,我可能会尝试重新连接我所连接的对等设备,因为它们仍处于联机状态。如果客户端与我断开连接,我不想尝试重新连接到它一段时间,因为它可能会关闭,即使我还在运行。

2 个答案:

答案 0 :(得分:3)

我能够从EventMachine谷歌小组获得答案。

http://groups.google.com/group/eventmachine/browse_thread/thread/92d92d7d101e933c

基本上你可以使用EM.next_tick来运行你不想在ctrl-c上做的额外的东西(因为反应堆关闭而且没有下一个勾号)。

这是我的解绑方法:

  def unbind
    # temporarily disconnect in a way that would reconnect next time
    @peer.update_attribute :connected, false

    # really disconnect, this is not called on ctrl-c
    EM.next_tick do
      @peer.destroy
    end
  end

答案 1 :(得分:1)

CTRL + C是正在运行的进程的信号,你可以TRAP它,它看起来像:

interrupted = false

trap("INT") { interrupted = true }


if interrupted
   # CTRL+C pressed
end
# rest of program

类似地,您可以捕获更多信号,例如HUP或KILL