gpt4 book ai didi

ruby TCP 服务器 : Accepting a known socket

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:10 25 4
gpt4 key购买 nike

我的服务器可能会关闭 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com