我有一个 Python 程序,它通过套接字连接将请求发送到本地第三方应用程序,然后该应用程序将我的请求转发到服务器。然后,服务器响应通过第三方应用程序返回到我的套接字。几个月来,一切都运行正常,服务器的回复是即时的。
本周二,服务器突然间似乎没有返回响应。响应通常是即时的,但现在 20% 的查询在 2 分钟内没有响应,之后我收到一条错误消息,说我无法检索请求的数据。
我已经与服务器人员核实过,他们收到了我的请求,但是由于某种原因,我没有收到少数请求的回复。
我使用不同的互联网连接 (3g) 对此进行了测试,该连接使用的 ISP 与我的 DSL 线路不同。使用 3g 时问题似乎已解决,因此问题可能出在我的 DSL 线路上,也可能出在我的 ISP 上(限制端口?)
我不知道如何解决此问题。我不是网络专家,所以请记住任何故障排除建议。我可以在 Linux 或 Windows 上测试此问题,因此对两者的建议都可以。
答案1
您需要确保使用的是 TCP 套接字数据包,而不是 UDP。这样才能重试,因为大多数 ISP 都会丢弃数据包以限制线路。
如果您使用 UDP,则 TCPIP 堆栈将不会重试发送数据包,因为 UDP 不需要 ACK。切换到 TCP 会增加少量开销,因为需要返回确认。