J'ai plusieurs systèmes Linux intégrés que je veux écrire 'Qui est en ligne?' service réseau dans Ruby. Ci-dessous est une partie liée de mon code:'Qui est en ligne?' Ruby Network Program
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
J'envoie la commande 'KNOCK KNOCK' d'un PC. Maintenant, le problème est qu'ils reçoivent tous le message en même temps, ils essaient de répondre en même temps, ce qui provoque une exception Broken Pipe (qui est la raison de mon code 'rescue retry'). Ce code fonctionne bien parfois mais; D'autres fois, le service de réessayer une partie du code (qui est réveillé par l'exception Broken Pipe de sock.send) provoque un ou plusieurs systèmes à répondre après 5 secondes environ.
Y a-t-il une meilleure façon de faire cela puisque je suppose que je ne peux pas échapper à l'exception Broken Pipe?