TokenPocket钱包安卓版本支持的主流功能一览 java HttpURLConnection类的disconnect方法与http长连接详解
java 自带的HttpURLConnection类有个关闭连接的方法disconnect(),是用于关闭http连接的,但是有一个问题在于,http连接一直都是一次性的,不存在复用的可能性,所以当输入流和输出流关闭后,http请求过程也就结束了,为什么还需要这个方法?
java代码对该方法的说明如下:并没有提到关闭请求释放资源的说明,而是说调用该方法意味着一段时间之内不会再向目标机器发起请求,并且又强调了一遍HttpURLConnection类是不可复用的。
看到这段描述,我就想到了该方法应该是和长连接有关的。
http长连接在http1.1版本以及之后的相关版本中,connection默认是keep-alive,意思即是在http请求结束后保持tcp连接不断开以便下一次请求复用,tp钱包官方安装下载也就是http长连接, tp官网下载但是着要求请求放和服务端都支持,所以有理由怀疑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服务需要专门设计才能支持长连接),似乎该方法本身就没有任何作用。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
热点资讯/a>
- TokenPocket钱包的更新日志与新功能介绍 Token
- TokenPocket钱包安卓版本支持的主流功能一览 Tok
- tp官方下载链接 GoPro Quik
- TokenPocket钱包安卓版本支持的主流功能一览 TP钱
- tp官方网站下载 TokenPocket官网体验:下载后的用