Domanda

Mi piacerebbe essere in grado di scrivere un programma Ruby che possa riavviarsi senza interrompere le connessioni socket.

È stato utile?

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
scroll top