gpt4 book ai didi

ruby - 如何给 FTP 连接超时

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:59 25 4
gpt4 key购买 nike

背后的故事:

用 ruby​​ 1.8.6 编写的旧脚本,它打开到 ftp 的连接并下载配置文件。对于具有 windows ftp 服务器的特定客户端,脚本会挂起。日志在打开与 ftp 的连接后停止写入。这是一个旧脚本,它是用 ruby​​ 编写的,我不是这方面的专家。

我尝试了什么:

所以我尝试了这个超时实现来检查 ftp 连接是否挂断了这段代码

Timeout::timeout(5) {
ftp = Net::FTP.new(host,pass,host)
}

问题是这不起作用。我的猜测是解释器在打开连接时停止并且超时不会终止连接,因为解释器被卡住了。

这可能是问题所在吗?

你能告诉我是否有替代解决方案或者我做错了什么吗?

更多相关信息:

这个问题在一个月内偶尔会发生一次。最多喜欢两次。客户端向我们发送了 ftp 服务器日志,但在那一侧似乎没有任何问题。只是FTP根本无缘无故卡在那里...

最佳答案

我不确定它是否会无限期挂起。如果没有,最好的方法是在/如果最终超时时 try catch 错误代码。这将为分析提供更多信息。

下面是一些可能的解决方法。

使用 Process.fork 超时

然而与此同时,您可能会切换到在另一个 process 中运行 FTP 任务相反,并在其上使用超时。这将防止 ruby​​ 全局解释器锁禁用您现在怀疑的可能的超时事件。

像这样:

child = Process.fork do
# Run the whole FTP task in here...
ftp = Net::FTP.new(...)
...
end

# Timeout handling is done in the parent process
begin
Timeout::timeout(...) do
Process.wait(child)
end
rescue Timeout::Error
# Terminate child in case of timeout
Process.kill("KILL", child)
end

使用 SystemTimer 超时

由于您运行的是 ruby​​ 1.8.6,另一个选择是查看 SystemTimer。 ,它试图绕过 ruby​​ 1.8 Timeout 实现的限制。

关于ruby - 如何给 FTP 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988433/

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