Wie erstelle ich unter Unix in Ruby dauerhafte Netzwerk-Sockets?
Frage
Ich möchte in der Lage sein, ein Ruby-Programm zu schreiben, das neu gestartet werden kann, ohne dass die Socket-Verbindungen unterbrochen werden.
Lösung
Dieses Programm ruft die Homepage von Google ab und wenn Sie ihr dann SIG_INT über Strg-C übergeben, startet es das Programm neu und liest die Ausgabe der Homepage aus dem offenen Socket mit Google.
#!/usr/bin/ruby
#simple_connector.rb
require 'socket'
puts "Started."
if ARGV[0] == "restart"
sock = IO.open(ARGV[1].to_i)
puts sock.read
exit
else
sock = TCPSocket.new('google.com', 80)
sock.write("GET /\n")
end
Signal.trap("INT") do
puts "Restarting..."
exec("ruby simple_connector.rb restart #{sock.fileno}")
end
while true
sleep 1
end
Andere Tipps
Sie sprechen von Netzwerk-Sockets, nicht von UNIX-Sockets, nehme ich an?
Ich bin mir nicht sicher, ob dies Ihren Anforderungen entspricht, aber ich würde es so machen, dass ich den Netzwerk- und den Logikteil trenne und nur den Logikteil neu starte und dann den Logikteil wieder mit dem Netzwerkteil verbinde.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow