作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的服务器可能会关闭 TCPServer
然后重新启动,将所有用户保存到一个文件中,并立即重新加载它们;他们的联系不会中断。
问题是我似乎无法重新初始化他们的流。
当我们重新启动(并尝试保持连接)时,我重新初始化 TCPServer,并加载我的连接用户数组 - 因为每个用户都有一个现有的套接字地址,存储为 <TCPSocket:0x00000000000000>
,我可以用 TCPServer 重新初始化这些地址吗?
通常,每个用户都连接并被接受:
$nCS = TCPServer.new(HOST, PORT)
begin
while socket = $nCS.accept
Thread.new( socket ) do |sock|
begin
d = User.new(sock)
while sock.gets
szIn = $_.chomp
DBG( "Received '" + szIn + "' from Client " + sock.to_s )
d.parseInput( szIn )
end
rescue => e
$stdout.puts "ERROR: Caught error in Client Thread: #{e} \r\n #{e.backtrace.to_s.gsub(",", ",\r\n")}"
sock.write("Sorry, an error has occurred, and you have been disconnected."+EOL+"Please try again later."+EOL)
d.closeConnection
end
end
end
rescue => e
$stdout.puts "ERROR: Caught error in Server Thread: #{e} \r\n #{e.backtrace.to_s.gsub(",", ",\r\n")}"
exit
end
要给它一个热重启的命令,我们使用 exec('./main --copyover')
标记正在发生复制。
如果$connected
持有所有用户的数组,并且每个用户都有一个套接字,我如何重新初始化重启前打开的套接字(假设另一端仍然连接)?
我怀疑使用 exec("./main", "--copyover", *$nCS, *$connected)
让我更接近,因为这只是替换了过程,并且应该维护文件(而不是关闭它们)。
最佳答案
你不能。套接字仅在进程的生命周期内有效:当进程退出时,它由操作系统关闭。这反过来又使连接无效,因此另一端仍未连接。
关于 ruby TCP 服务器 : Accepting a known socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272317/
我是一名优秀的程序员,十分优秀!