ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Android上的持久性HttpURLConnections

2019-07-30 04:37:50  阅读:281  来源: 互联网

标签:persistent android java network-programming httpurlconnection


我有一个问题,试图使用持久的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组件显式控制连接管理.

祝好运.

标签:persistent,android,java,network-programming,httpurlconnection
来源: https://codeday.me/bug/20190730/1578584.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有