¿Cómo puedo crear sockets de red persistentes en Unix en Ruby?
Pregunta
Me gustaría poder escribir un programa Ruby que pueda reiniciarse sin perder sus conexiones de socket.
Solución
Este programa obtiene la página de inicio de Google y luego, cuando le pasa SIG_INT mediante ctrl-c, reinicia el programa y lee el resultado de la página de inicio desde el socket abierto 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
Otros consejos
¿Estás hablando de sockets de red, no de sockets UNIX, supongo?
No estoy seguro de que esto se adapte a sus necesidades, pero la forma en que lo haría es separando la parte lógica y de red, reiniciando solo la parte lógica y luego reconectando la parte lógica a la parte de red.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow