提升TimeoutError:[Errno 110] sockt.send_all(请求)时连接超时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提升TimeoutError:[Errno 110] sockt.send_all(请求)时连接超时相关的知识,希望对你有一定的参考价值。

客户端插座设置:

 s = socket.create_connection(self._addr, timeout=15)
 s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
 s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
 s.settimeout(300)

服务器插座设置:

 sock = socket.socket(family=socket.AF_INET)
 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 sock.setblocking(False)
 sock.bind(addr)
 sock.listen(512)

每台客户机约有300个客户端(8核CPU)。每个服务器工作者服务约300个客户端。要求的身体很小,可能是2KB。 somtetimes客户端将引发超时错误,而s.send_all(请求)远远少于300s,特别是当客户端密集请求时。

我不知道问题出在哪里?在客户端或服务器端?

答案

Finanly我发现原因不是并发性。它是由LB和keep-alive选项引起的。 当服务器发送FIN时,LB将在2分钟后删除连接信息,无论客户端是否发送FIN。 客户端没有向服务器发送FIN,并且在tcpkeepalivetime之后,客户端将开始发送detecor消息,但LB不会识别,因为连接信息已被删除。所以客户端将重试tcpkeepaliveprobes次,然后发送RST。 在此之后,如果客户端发送somothing,则会引发TimeoutError。 在我的应用程序中,服务器不会主动发送消息。 我对这种情况的解决方案是:在客户端发送之前,检查套接字是否可读,如果套接字是可读的,则连接不正常,需要关闭套接字并重新连接服务器。

(原谅我可怜的英语,我希望这可能对某人有所帮助)

以上是关于提升TimeoutError:[Errno 110] sockt.send_all(请求)时连接超时的主要内容,如果未能解决你的问题,请参考以下文章

pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection

如何修复颤振中的“SocketException:OS错误:连接超时,errno = 110,地址= 192.168.5.10,端口= 49590”错误

Flutter AspNet Core SocketException (SocketException: OS Error: Connection timed out, errno = 110, a

利用core dump进行C++项目socket编程的异常定位(errno为110, Connection timed out)

python发邮脚本运行每次都报socket.error: [Errno 110] Connection timed out ,用别人的机器也报

Sequelize:TimeoutError:ResourceRequest 超时