Как сделать постоянные сетевые сокеты на Unix в Ruby?
Вопрос
Я бы хотел написать программу ruby, которая может перезапускаться без разрыва соединений с сокетами.
Решение
Эта программа получает домашнюю страницу Google, а затем, когда вы передаете ее SIG_INT через ctrl-c, она перезапускает программу и считывает вывод домашней страницы из открытого сокета с помощью 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
Другие советы
Вы говорите о сетевых сокетах, а не о сокетах UNIX, я полагаю?
Я не уверен, что это соответствует вашим потребностям, но я бы сделал это, разделив сетевую и логическую части и перезапустив только логическую часть, а затем снова подключив логическую часть к сетевой части.
Не связан с StackOverflow