gpt4 book ai didi

ruby - Ruby 中的套接字超时

转载 作者:行者123 更新时间:2023-12-03 12:02:59 31 4
gpt4 key购买 nike

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




我有以下代码基本上使用 SSL 在端口 443 上监听(从此处复制另一个问题):
How can I get info on an already closed SSL connection that caused an error?

#!/usr/bin/env ruby

require "socket"
require "openssl"

cert_path = Dir["/etc/letsencrypt/live/example.com/fullchain.pem"].first
key_path = Dir["/etc/letsencrypt/live/example.com/privkey.pem"].first
chain_path = Dir["/etc/letsencrypt/live/example.com/chain.pem"].first
context = OpenSSL::SSL::SSLContext.new
context.cert = OpenSSL::X509::Certificate.new( File.read( cert_path ))
context.key = OpenSSL::PKey::RSA.new( File.read( key_path ))
context.extra_chain_cert = [ OpenSSL::X509::Certificate.new( File.read( chain_path )) ]

port = 443
t = TCPServer.new( port )
s = OpenSSL::SSL::SSLServer.new( t, context )

begin
r = s.accept
rescue
# get client ip here
p r.methods.sort
end

客户端通过发布请求向服务器发送信息,代码在这里运行超过 35 分钟,然后将有关操作的结果发送回客户端。这个电话是一个阻塞电话,我需要这种方式。

问题是如果代码运行超过 30 分钟,则服务器代码无法发回信息。如果低于 30 分钟,那么它可以没有任何问题。操作系统是 Linux(Ubuntu 18 x64),我一直使用 netstat 检查套接字,它们一直存在,直到程序结束,状态为 ESTABLISHED,这里没有可疑的东西。

我认为它必须与某种系统超时值有关。从 post 调用中,我将所有超时设置为 HTTP 对象(打开、读取、keep_alive、继续、写入、ssl),仍然没有运气,结果没有返回给客户端。

你能给我任何关于什么设置可能导致这个问题的提示吗?谢谢你。

编辑:

我已经在没有 SSL 层的情况下测试了我的代码,并且没有超时问题。我还测试了上面 Contex 对象的 timeout 和 ssl_timeout 属性,没有任何结果。仍在寻找一个设置来避免 SSL 层超时导致的问题。

编辑:

我已经在客户端使用 Python3 而不是 Ruby (2.6) 通过 SSL 测试了调用,并且发生了同样的问题。服务器端有 Ruby。因此,导致它的要么是 OpenSSL 的 Ruby 实现,要么是 OpenSSL 本身。

编辑:

新进展:我注意到在同一主机上通过 SSL 启动该过程没有问题,因此我认为我的托管服务提供商可能会对更长的连接设置一些限制。

编辑:

解决了。我从来没有这样想过,但我的 ISP 与我较长连接的时间限制问题有关。

最佳答案

我已经测试过,我的 ISP 与我较长连接的时间限制问题有关。

关于ruby - Ruby 中的套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59664079/

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