我正在实现一个ruby服务器来处理由GPRS模块创建的套接字。事情是,当模块掉电时,没有迹象表明套接字已关闭。具有“看门狗”的Ruby线程
我做的线程来处理多个插座与在同一台服务器。我问的是这样的:有没有办法在一个线程中使用一个定时器,在每个套接字输入后重置它,并且如果它超时,关闭线程?我在哪里可以找到关于此的更多信息?
编辑:代码示例不检测插座关闭
require 'socket'
server = TCPServer.open(41000)
loop do
Thread.start(server.accept) do |client|
puts "Client connected"
begin
loop do
line = client.readline
open('log.txt', 'a') { |f|
f.puts line.strip
}
end
rescue
puts "Client disconnected"
end
end
end
使用[EventMachine的(https://github.com/eventmachine/eventmachine)!因为它是♥。 – omninonsense 2012-04-06 06:31:43
事件机器在这种情况下如何提供帮助? – 2012-04-06 22:51:58
你不能真正告诉套接字关闭。它可能需要几个小时,几天甚至几个月,直到应用程序发现套接字关闭。您需要在客户端(GPRS模块)和您的服务器之间进行ping通。 – omninonsense 2012-05-18 21:47:50