'Quem está online?' Programa de rede Ruby
-
22-07-2019 - |
Pergunta
Eu tenho vários sistemas Linux incorporados que quero escrever um 'quem está online?' Serviço de rede em Ruby. Abaixo está parte relacionada do meu código:
mySocket = UDPSocket.new
mySocket.bind("<broadcast>", 50050)
loop do
begin
text, sender = mySocket.recvfrom(1024)
puts text
if text =~ /KNOCK KNOCK/ then
begin
sock = UDPSocket.open
sock.send(r.ipaddress, 0, sender[3], 50051)
sock.close
rescue
retry
end
end
rescue Exception => inLoopEx
puts inLoopEx.message
puts inLoopEx.backtrace.inspect
retry
end
end
Eu envio o comando 'knock knock' de um PC. Agora, o problema é que, como todos recebem a mensagem ao mesmo tempo, eles tentam responder ao mesmo tempo, o que causa uma exceção de tubo quebrado (que é o motivo do meu código 'Réstima de resgate'). Esse código funciona bem às vezes, mas; Outras vezes, a parte de repetição do resgate do código (que é acionada pela exceção do tubo quebrado da Sock.send) faz com que um ou mais sistemas respondam após 5 segundos ou mais.
Existe uma maneira melhor de fazer isso, pois presumo que não consigo escapar da exceção do tubo quebrado?
Solução
Descobri que a exceção foi causada pela parte 'R.ipaddress' no comando de envio, que está relacionado aos internos do meu sistema incorporado ...