Come posso creare socket di rete persistenti su Unix in Ruby?
Domanda
Mi piacerebbe essere in grado di scrivere un programma Ruby che possa riavviarsi senza interrompere le connessioni socket.
Soluzione
Questo programma ottiene la home page di Google e poi quando gli passi SIG_INT tramite ctrl-c riavvia il programma e legge l'output della home page dal socket aperto con 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
Altri suggerimenti
Stai parlando di socket di rete, non di socket UNIX, presumo?
Non sono sicuro che questo soddisfi le tue esigenze, ma il modo in cui lo farei è separare la parte logica e quella di rete e riavviare solo la parte logica, quindi ricollegare la parte logica alla parte di rete.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow