gpt4 book ai didi

java - 基于 JVM 的 longpoll/comet 客户端 : routers killing idle connections

转载 作者:行者123 更新时间:2023-11-30 11:51:48 25 4
gpt4 key购买 nike

我目前有一个基于 JVM 的网络客户端,它使用标准的 java.net.HttpURLConnection 执行 HTTP 长轮询(又名 cometd )请求。我将连接超时设置得非常高(1 小时)。对于大多数用户来说,它工作正常。但部分用户收不到服务器发送的数据,最终在1小时后超时。

我的理论是(NAT)路由器超时并丢弃它们的连接,因为它们在服务器发送任何数据之前空闲时间太长。

我的问题是:

我可以为 java.net.HttpURLConnection 使用的连接启用 TCP keep-alive 吗?我找不到执行此操作的方法。

我应该使用不同的 API(与 HttpURLConnection 不同)吗?

其他解决方案?

最佳答案

java.net.HttpURLConnection 处理 Keep-Alive header transparently , 它可以被控制并且默认是开启。但是您的问题不在 Keep-Alive 中,这是一个更高级别的标志,指示服务器应在处理第一个请求后关闭连接,而不是等待下一个请求。

在您的情况下,OSI 堆栈的较低级别可能会中断连接。因为长时间保持一个开放但空闲的 TCP 连接从来都不是一个好的选择(具有两个开放连接的 FTP 协议(protocol):一个用于命令,一个用于数据有同样的问题),我宁愿实现某种断开连接/在客户端重试故障安全程序。

事实上,安全限制可能只是几分钟,而不是几小时。只需每 60 秒或 5 分钟主动断开与 HTTP 服务器的连接。应该做的伎俩。

关于java - 基于 JVM 的 longpoll/comet 客户端 : routers killing idle connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236145/

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