加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Android上的持久性HttpURLConnections

发布时间:2020-12-15 08:40:06 所属栏目:Java 来源:网络整理
导读:我有一个问题,试图使用持久的HTTP 1.1连接获得 Android应用程序(好吧,服务,它有所不同). 以下循环(简化测试用例)通过桌面JRE上的单个TCP会话工作,但在Android设备上导致整个套接字创建/拆除周期. while (true) { URL url; try { url = new URL("http://10.0.
我有一个问题,试图使用持久的HTTP 1.1连接获得 Android应用程序(好吧,服务,它有所不同).

以下循环(简化测试用例)通过桌面JRE上的单个TCP会话工作,但在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 Components库进行HTTP连接(甚至是那些使用java.net接口完成的):因此这种行为与Oracle JVM略有不同.

从理论上讲,底层的Harmony代码尊重http.keepAlive系统属性,但Google的副本是否保留了这种行为对我来说并不确定.

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

祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读