如何在Ruby中的Unix上建立持久性网络套接字?

时间:2020-03-05 18:46:09  来源:igfitidea点击:

我希望能够编写一个ruby程序,该程序可以在不断开套接字连接的情况下重新启动。

解决方案

回答

我们是在谈论网络套接字,而不是我假设的UNIX套接字?

我不确定这是否适合需求,但是我要这样做的方法是分离网络和逻辑部分,然后仅重新启动逻辑部分,然后将逻辑部分重新连接到网络部分。

回答

该程序获取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