문제

소켓 연결을 끊지 않고 다시 시작할 수 있는 Ruby 프로그램을 작성하고 싶습니다.

도움이 되었습니까?

해결책

이 프로그램은 Google의 홈페이지를 가져온 다음 ctrl-c를 통해 SIG_INT를 전달하면 프로그램을 다시 시작하고 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