java HttpURLConnection类的disconnect方法与http长连接详解

 更新时间:2024年04月29日 08:40:04   作者:苦荞米  
这篇文章主要介绍了java HttpURLConnection类的disconnect方法与http长连接,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

disconnect方法

java 自带的HttpURLConnection类有个关闭连接的方法disconnect(),是用于关闭http连接的,但是有一个问题在于,http连接一直都是一次性的,不存在复用的可能性,所以当输入流和输出流关闭后,http请求过程也就结束了,为什么还需要这个方法?

java代码对该方法的说明如下:并没有提到关闭请求释放资源的说明,而是说调用该方法意味着一段时间之内不会再向目标机器发起请求,并且又强调了一遍HttpURLConnection类是不可复用的。

看到这段描述,我就想到了该方法应该是和长连接有关的。

/**
* Indicates that other requests to the server
* are unlikely in the near future. Calling disconnect()
* should not imply that this HttpURLConnection
* instance can be reused for other requests.
*/
public abstract void disconnect();

http长连接

在http1.1版本以及之后的相关版本中,connection默认是keep-alive,意思即是在http请求结束后保持tcp连接不断开以便下一次请求复用,也就是http长连接,但是着要求请求放和服务端都支持,所以有理由怀疑disconnect()方法与http长连接有关,但是着需要验证。

http长连接测试

为此搭建了一个简易spring boot项目作为测试,这里http协议使用是1.1版本,默认保持长连接模式。首先看一下正常的http请求过程中tcp连接状态的变化。

注:因为发起请求的一方在请求结束后程序就关闭了,所以不管有没有调用断开连接的方法,tcp连接都会在程序结束后断开。

在发起http请求后确立tcp连接,由于是本地调用,所以能看到有两个tcp连接记录,但是其实是同一个链接。

在程序结束后发起tcp请求的一方断开了链接,接受的一方进入了TIME_WAIT状态,这是防止丢包的准备关闭连接的状态。

然后在调用方加上了Thread.sleep()方法,让调用方发起请求后程序不结束。

但是发现不管有没有有执行disconnect()方法,tpc连接的状态都是一样的,就是在http请求结束后的一段时间内,tcp连接依然是确认状态,在持续数十秒后,tcp连接就关闭了,并没有发现监听状态。

结论

并没有发现HttpURLConnection类的disconnect()方法在保持http长连接中有任何作用(也有可能是spring boot服务需要专门设计才能支持长连接),似乎该方法本身就没有任何作用。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 5分钟快速了解String.trim()到底做了什么事

    5分钟快速了解String.trim()到底做了什么事

    trim方法一般用来去除空格,但是根据JDK API的说明,该方法并不仅仅是去除空格,它能够去除从编码'\u0000'至'\u0020'的所有字符,这篇文章主要给大家介绍了如何通过5分钟快速了解String.trim()到底做了什么事,需要的朋友可以参考下
    2021-11-11
  • MyBatis 参数映射机制实践记录

    MyBatis 参数映射机制实践记录

    这篇文章主要介绍了MyBatis 参数映射机制实践记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-12-12
  • Java遍历Map的5种方式实例

    Java遍历Map的5种方式实例

    Map作为Java中的一种集合,以键值对的形式存放一批数据,经常会被我们应用在项目中,下面这篇文章主要给大家介绍了关于Java遍历Map的5种方式,需要的朋友可以参考下
    2023-02-02
  • Java中反射的一个简单使用

    Java中反射的一个简单使用

    一直感觉Java的反射机制很强大,JAVA反射技术在平时我们的开发中虽然很少会用到,但在我们所使用的框架源码中是经常会用到的。这篇文中就给大家介绍了关于Java中反射的一个简单使用,有需要的朋友们下面来一起看看吧。
    2016-11-11
  • JAVA多线程之实现用户任务排队并预估排队时长

    JAVA多线程之实现用户任务排队并预估排队时长

    本文主要介绍了Java多线程之实现用户任务排队并预估排队时长的问题,文中的代码具有一定的学习和工作价值,感兴趣的小伙伴快跟随小编一起学习一下吧
    2021-12-12
  • Windows中使用Java生成Excel文件并插入图片的方法

    Windows中使用Java生成Excel文件并插入图片的方法

    这篇文章主要介绍了Windows中使用Java生成Excel文件并插入图片的方法,其中向Excel中插入图片文中通过使用Apache POI来实现,需要的朋友可以参考下
    2016-02-02
  • Spring @Lookup深入分析实现原理

    Spring @Lookup深入分析实现原理

    这篇文章主要介绍了Spring @Lookup实现原理,我们知道在spring容器中单独的一个抽象类是不能成为一个bean的,那么有没有办法呢?这个时候我们可以使用Lookup注解
    2023-01-01
  • 页面设计之事件处理综合介绍

    页面设计之事件处理综合介绍

    页面设计之事件处理,当你把界面都设计好了,总需要添加相应的执行动作给组件,在有相应的时间处理机制
    2012-12-12
  • Java实现文件切割拼接的实现代码

    Java实现文件切割拼接的实现代码

    这篇文章主要介绍了Java实现文件切割拼接的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java 数据结构与算法系列精讲之环形链表

    Java 数据结构与算法系列精讲之环形链表

    无论是静态链表还是动态链表,有时在解决具体问题时,需要我们对其结构进行稍微地调整。比如,可以把链表的两头连接,使其成为了一个环状链表,通常称为循环链表
    2022-02-02

最新评论