【问题标题】:How to Reuse HttpUrlConnection? [duplicate]如何重用 HttpUrlConnection? [复制]
【发布时间】:2013-04-21 19:44:41
【问题描述】:

我有兴趣重用 HttpUrlConnection(作为我正在开发的服务器和客户端之间的全状态协议的一部分)。 我知道持久 http 有一个 Connection=keep-alive 标头。 现在,我想知道如何重用这样的连接。 我写了这段代码:

URL u = new java.net.URL("http://localhost:8080/Abc/Def");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Connection", "keep-alive");
c.setHeader("A","B");
c.getInputStream() //here I see that server gets my messages (using DEBUG)
c.setHeader("B","C"); //

现在如何将这个“B”标头重新发送到服务器,我尝试重新连接等,但没有任何效果。

而且服务器也执行response.setHeader("Connection", "keep-alive");

我看过很多论坛,但没有人写过这个。也许HttpURLConnection 不处理这个?

【问题讨论】:

    标签: java http servlets httpurlconnection


    【解决方案1】:

    你没有。你关闭这个并创建一个新的。它在后台执行 TCP 连接池和保持活动。

    【讨论】:

    • 太棒了,我什至没有想到这可以工作 - 我确信这会打开另一个连接。
    • 除非它经常不这样做,原因尚不清楚。
    • @aberglas 从未见过,在已经运行了七年的生产代码中。如果你有证据,请出示。没有来源的轶事是不够的。
    • @Tuntable 有一个由HttpClient 维护的“保持活动缓存”(当您从其 InputStream 中读取时,URL 在内部使用)。在此“KeepAliveStream”上调用close() 会将其放入缓存中。此缓存的关键是基于 URL 协议、主机和端口。在sun.net.www.http.KeepAliveCache.LIFETIME 毫秒(即 5000)后自动删除密钥。因此,如果任何protocol://host:port URL 在 5 秒后没有任何活动,它们将自动关闭。
    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2015-08-07
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多