Я реализую рубиновый сервер для обработки сокетов, создаваемых из модулей GPRS. Дело в том, что когда модуль отключается, нет никаких признаков того, что гнездо закрыто.Ruby Thread с «watchdog»
Я занимаюсь потоками для обработки нескольких сокетов с одним и тем же сервером. Я прошу следующее: есть ли способ использовать таймер внутри потока, перезагружать его после каждого входа сокета, и если он попадает в таймаут, закрывает поток? Где я могу найти дополнительную информацию об этом?
EDIT: Пример кода, который не обнаруживает сокет закрытия
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
Как в этом случае поможет машина-машина? –
Вы не можете сказать, что розетка закрыта. Это может занять несколько часов, дней и, возможно, месяцев, пока ваше приложение не сообщит, что розетка закрыта. Вам нужно использовать ping-bong между клиентом (GPRS-модуль) и вашим сервером. – omninonsense