java - Android 上的持久 HttpURLConnections

标签 java android network-programming httpurlconnection persistent

我在尝试让 Android 应用程序(好吧,服务,它会产生任何影响)使用持久 HTTP 1.1 连接时遇到问题。

以下循环(简化的测试用例)在桌面 JRE 上通过单个 TCP session 工作,但在 Android 设备上会导致整个套接字创建/拆卸循环。

        while (true) {
            URL url;
            try {
                url = new URL("http://10.0.0.125:8080/SRV?");

                URLConnection connection = url.openConnection();

                HttpURLConnection httpConnection = (HttpURLConnection) connection;                  
                int responseCode = httpConnection.getResponseCode();

            } catch (MalformedURLException e) {
            } catch (IOException e) {
            }       
        }

Oracle 的 JDK 描述了称为“系统属性”的东西:

http.keepAlive= default: true

http.maxConnections= default: 5

Android 的运行时是否有类似的东西阻止持久连接的维护?

最佳答案

Android 的 JVM 在后台使用 Apache HTTP 组件库进行 HTTP 连接(即使是那些使用 java.net 接口(interface)完成的连接):因此其行为与 Oracle JVM 略有不同。

理论上,底层 Harmony 代码尊重 http.keepAlive 系统属性,但我不确定 Google 的副本是否保留了该行为。

如果您想绝对确定发生了什么,您必须使用 HttpComponents 代码。这是漫长而痛苦的,但如果你看看 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html它概述了 http 组件的连接管理方法。查看 2.11 节,其中详细介绍了如何使用 HTTP 组件显式控制连接管理。

祝你好运。

关于java - Android 上的持久 HttpURLConnections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917818/

相关文章:

java - 为什么在将数据从文件复制到数组 FileReader 时无法获得输出

java - 推送到达时将 cordova 应用程序带到前台

android - 在 Android Studio 中的 EditText 的所有四个边上放置阴影

php - 使用带轮询的 PHP 进行网络间文件传输

java - 运行两个线程时出现 ConcurrentModificationException 问题

java - 我使用 Hystrix(1.5.18) ,并设置参数 ErrorThresholdPercentage=30,始终在标记成功时切换断路状态

java - 使用正则表达式查找一组+JAVA

javascript - Reactjs:拆分功能不起作用?

android - 当您将 Android API < 8 注册到 C2DM 时会发生什么?

java - 使用 Java 基于 HttpConnection 检索本地 IP 地址