有没有一种很好的方法来区分我何时执行Ctrl + C手动关闭所有连接,以及客户端何时断开与我的服务器的连接?他们似乎都称之为unbind
方法。
当我使用Ctrl + C手动关闭时,我可能会尝试重新连接我所连接的对等设备,因为它们仍处于联机状态。如果客户端与我断开连接,我不想尝试重新连接到它一段时间,因为它可能会关闭,即使我还在运行。
答案 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