java实现http的长连接

发布于 2021-12-02 00:01:45 字数 1059 浏览 772 评论 9

现在java的URLConnection类是怎么实现http的长连接的?
我的理解:
当应用程序读取完响应体内容后或者调用 close() 关闭了URLConnection.getInputStream()返回的流,
JDK中的HTTP协议句柄将关闭连接,并将连接放到连接缓存中。下次获取URLConnection示例,并获取InputStream流时,会再次使用之前打开的TCP连接。

也就是说:

public static String sendPost(String url, String param) {
		String result = "";
		try {
			URL httpurl = new URL(url);
			HttpURLConnection httpConn = (HttpURLConnection) httpurl.openConnection();
			httpConn.setDoOutput(true);
			httpConn.setDoInput(true);
			PrintWriter out = new PrintWriter(httpConn.getOutputStream());
			out.print(param);
			out.flush();
			out.close();
			BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
			in.close();
		} catch (Exception e) {
			System.out.println("没有结果!" + e);
		}
		return result;

	}

我在间隔较短的时间内调用上面的方法(连接的地址不一样,但还是同一个服务器同一个项目),用的是同一个TCP连接。我这么理解对吗?不对的话请具体讲讲。谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

长安忆 2021-12-02 08:45:40

都是短连接吧,实现长连接需要用socket 或者netty

明媚如初 2021-12-02 08:43:40

哥们去看下Http权威指南~~长连接,正常情况下是报文信息里面包含了Connection:close的时候 会关闭连接~~

彩扇题诗 2021-12-02 08:40:26

http是单向链接

虐人心 2021-12-02 08:35:05

我翻看了部分源码,并没有发现HttpURLConnection使用了连接池,除非你使用的是同一个对象,你每次url.openConnection()就应该是创建了一个新的连接 当然或许是我查看的不仔细,或许还有其他实现 jdk版本1.7

居里长安 2021-12-02 07:50:55

如果需要引入连接池,可以使用httpclient 当然连接池也不是你理解的那样,池子里有很多鱼,你捞一条之后扔回去,再捞就不一定是这一条了,除非这个连接池是你自己实现的,捞鱼的逻辑你来写的,这样你爱怎么着就怎么着

本王不退位尔等都是臣 2021-12-02 07:46:00

回复
那java有实现http的keep-alive吗?

明媚如初 2021-12-02 07:28:30

回复
貌似你问的问题中某些词语把我带到沟里去了,我再研究研究

只为守护你 2021-12-02 06:55:38

回复
经过抓包,的确是在短时间内调用,是同一个tcp连接,工具使用wireshark 2.0.1,加入System.setProperty("http.keepalive","false");会开启多个连接

叹沉浮 2021-12-02 05:57:06

引用来自“maradona”的评论

不是,不一定

哥F12才把你的问题看全

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文