Как сделать постоянные сетевые сокеты на Unix в Ruby?

StackOverflow https://stackoverflow.com/questions/38592

  •  09-06-2019
  •  | 
  •  

Вопрос

Я бы хотел написать программу 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, я полагаю?

Я не уверен, что это соответствует вашим потребностям, но я бы сделал это, разделив сетевую и логическую части и перезапустив только логическую часть, а затем снова подключив логическую часть к сетевой части.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top