HttpURLConnection的警告

这段代码对您来说还不错吗?

HttpURLConnection connection = null;
try {connection = (HttpURLConnection) url.openConnection();try (InputStream in = url.getInputStream()) {return streamToString(in);}
} finally {if (connection != null) connection.disconnect();
}

看起来不错–它打开一个连接,从中读取,关闭输入流,释放连接,仅此而已。 但是,在运行一些性能测试并试图找出瓶颈问题时,我们发现disconnect()看起来并不那么好–当我们停止断开连接时,传出连接的数量是原来的两倍。 这是javadoc:

表示在不久的将来不太可能向服务器发出其他请求。 调用disconnect()并不意味着可以将此HttpURLConnection实例重新用于其他请求。

在类itslef上:

如果持久连接当时处于空闲状态,则调用disconnect()方法可能会关闭基础套接字。

这仍然不清楚,但是给我们一个暗示,还有更多的东西。 读取几个计算器的和java.net答案(后1 , 2 , 3 , 4 ),并且还对Android文档相同的类,它是从Oracle实现实际上不同的,事实证明, .disconnect()实际关闭(或在Android的情况下可能会关闭)基础套接字。

然后,我们可以找到这部分文档 (它在javadoc中进行了链接,但是在调用断开连接时并没有立即变得很重要),这为我们提供了全貌:

keep.alive属性(默认值:true)指示套接字可以被后续请求重用。 通过打开与服务器的连接(支持保持活动状态)来工作,然后不再需要打开套接字的开销。 默认情况下,最多重复使用5个此类套接字(每个目标)。 您可以通过设置http.maxConnections属性来增加此池的大小。 但是,将其增加到10、20和50之后,传出请求的数量没有明显改善。

但是,当我们使用池化连接管理器从HttpURLConnection切换到apache http client时 ,每秒发出的连接数量增加了3倍。 而这并没有对其进行微调。

负载测试,即用尽可能多的请求轰炸目标服务器,听起来像一个小众的用例。 但是实际上,如果您的应用程序在每个请求中调用了堆栈中的Web服务或外部服务,那么您将遇到相同的问题–您每秒可以向目标服务器发出更少的请求,因此,每秒响应您的用户的请求更少。

这里的建议是:几乎总是喜欢apache http客户端 –它具有更好的API方式和更好的性能,而无需了解其在下面的功能。 但也要注意同样的注意事项–检查池大小和连接重用 。 如果使用HttpURLConnection ,请在阅读连接响应后不要断开连接,请考虑增加套接字池的大小,并注意相关问题 。

翻译自: https://www.javacodegeeks.com/2014/09/caveats-of-httpurlconnection.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeapFTP 注册码

LeapFTP v2.7.6.613 汉化版II 特别版Name:crsky Code:214065-658136565http://www.crsky.com/soft/664.htmlLeapFTP v2.7.6.613 英文版http://www.crsky.com/soft/378.htmlName:crsky Code:214065-658136565------------LeapFTP 2.7.6.613 汉化版软件类别:汉化补丁/…

Windows7下Docker的安装

转自 https://blog.csdn.net/xiangxiezhuren/article/details/79698913 无法打开图3,打开属性。给其添加git路径 无法使用图2下载 https://www.cnblogs.com/huang-yc/p/10350408.html 转载于:https://www.cnblogs.com/shufeiyang/p/11016177.html

简而言之,JUnit:单元测试断言

简而言之,本章涵盖了各种单元测试断言技术。 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了该主题,并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里根(R…

vue 安装使用mockjs

使用 mockjs 的案例过程&#xff1a; 1. 安装 npm install axios -S npm install mockjs --save-dev npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置_jwl_willon的博客-CSDN博客_npm save备注&#xff1a;<> 意为等价于&#xff1b;1、npm install …

vue 总结

1、尽量不操作dom 使用数据双向绑定 2、使用指令 如:title 不是title 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

OpenFileDialog 类的ShowDialog() 错误的解决

首先&#xff0c;一个类里&#xff0c;有个linkLabel1 private OpenFileDialog openFileDialog1;private DialogResult result; private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { openFileDialog1 new OpenFileDialog(); …

大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计

1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [rootmini3 kafka]# bin/kafka-console-producer.sh --broker-list mini1:9092 --topic cyf-test 程序代码 package org.apache.sparkimport java.net.InetSocketAddressimport org.apache.spark.HashParti…

日期/时间格式/解析,Java 8样式

自Java 几乎 开始以来&#xff0c;Java开发人员就通过java.util.Date类&#xff08;自JDK 1.0起&#xff09;和java.util.Calendar类&#xff08;自JDK 1.1起 &#xff09;来处理日期和时间。 在这段时间内&#xff0c;成千上万&#xff08;甚至可能数百万&#xff09;的Java开…

vue-router 响应路由参数的变化

提醒一下&#xff0c;当使用路由参数时&#xff0c;例如从 /user/foo 导航到 /user/bar&#xff0c;原来的组件实例会被复用。因为两个路由都渲染同个组件&#xff0c;比起销毁再创建&#xff0c;复用则显得更加高效。不过&#xff0c; 这也意味着组件的生命周期钩子不会再被…

无废话WPF系列5:控件派生图

1. WPF类控件的派生关系图&#xff0c;紫色的部分开始才算是进入WPF的框架里。 2. WPF控件图 WPF的UI控件主要有以下类型&#xff0c;ContentControl, HeaderedContentControl, ItemsControl, HeaderedItemsControl, Panel, Adorner(文字点缀元素), Flow Text(流式文本元素), T…

安装ipython和jupyter

本节内容&#xff1b; 安装ipython安装jupyterPycharm介绍 Python软件包管理一、安装ipython 1. python的交互式环境2. 安装ipython 可以使用pip命令安装。如果你是用pyenv安装的python的话&#xff0c;pip命令已经有了。 当需要安装包的时候&#xff0c;最好进入虚拟环境&…

vue 图片资源应该如何存放并引入(public、assets)?

全局cli配置&#xff1a;vue.config.js 之前写项目就想着怎么简单怎么来&#xff0c;图片要用了&#xff0c;就直接在要用图片的页面&#xff0c;新建一个跟页面同等级的 imgs 文件夹&#xff0c;然后在页面中直接 “./imgs/图片.png”&#xff0c;不得不说这样写很方便。 但是…

真正的动态声明性组件

在这篇简短的文章中&#xff0c;我将重点介绍ADF动态声明性组件。 我的意思是一个众所周知的ADF标签af&#xff1a;declarativeComponent 。 它可以用作将页面设计为页面片段和组件组成的一种非常便捷的方法。 例如&#xff0c;我们的页面可以包含以下代码片段&#xff1a; &l…

layui 树形组件下拉框

采用 layui 树形组件&#xff0c;版本&#xff1a;V2.6.8。只需要更新layui版本&#xff0c;不需要下载tableSelect。 原作者博客&#xff1a;https://blog.csdn.net/m0_67402588/article/details/123526860。 从 官网 更新日志可以看到&#xff0c;树形组件在2.5.7版本还在更新…

访问修饰符(C# 编程指南)

所有类型和类型成员都具有可访问性级别&#xff0c;用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性&#xff1a; public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型…

vuex Payload 荷载

1、payload payload&#xff1a;有效载荷&#xff0c;即记录有效信息的部分。 通常在传输数据时&#xff0c;为了使数据传输更可靠&#xff0c;要把原始数据分批传输&#xff0c;并且在每一批数据的头和尾都加上一定的辅助信息&#xff0c;比如这一批数据量的大小&#xff0c…

JSP知识总结

day11 JSP入门 1 JSP概述 1.1 什么是JSP JSP&#xff08;Java Server Pages&#xff09;是JavaWeb服务器端的动态资源。它与html页面的作用是相同的&#xff0c;显示数据和获取数据。 1.2 JSP的组成 JSP html Java脚本&#xff08;代码片段&#xff09; JSP动态标签 2 J…

layui table表格的复选框checkbox设置部分为不可选

需求&#xff1a;如上图&#xff0c;某些数据禁用删除功能&#xff0c;那么全选时&#xff0c;这些数据前面的复选框也不能选。 实现&#xff1a;在layui数据表格中设置了字段为 type:checkbox 但是想要实现部分不显示&#xff0c;不可选的功能。layui内置没有该功能&#xff…

Katas编写的Java教程:Mars Rover

编程kata是一种练习&#xff0c;可以帮助程序员通过练习和重复练习来磨练自己的技能。 本文是“ 通过Katas进行Java教程 ”系列的一部分。 本文假定读者已经具有Java的经验&#xff0c;熟悉单元测试的基础知识&#xff0c;并且知道如何从他最喜欢的IDE&#xff08;我是Intell…

es6 includes(), startsWith(), endsWith()

传统上&#xff0c;JavaScript 只有 indexOf方法&#xff0c;可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。includes()&#xff1a;返回布尔值&#xff0c;表示是否找到了参数字符串。startsWith()&#xff1a;返回布尔值&#xff0c;表示参数字符…