什么是连接池

发布于 2022-09-01 19:29:44 字数 416 浏览 7 评论 0

看了很多相关的文章,都写得太具体了,直接讲JAVA代码……希望大侠们能从概念上讲解一下

  • 首先不明白的是,客户端和服务端之间通过网络传输的话,无论如何也要三次握手吧?那连接池解决了什么问题呢?能避免了三次握手吗

  • 其次连接池维护在server端还是客户端?如果在server端,每次监听客户端的请求,还是会产生一个新socket,那么维护连接池的意义何在呢?如果在客户端,似乎更没有意义?

  • 或者说,难道连接池是一个类似于第三方代理机构的东西?客户端要连server,但不直接连,反而去连连接池,连接池保存了很多连接池和server的socket,然后随机分配一个给客户端?但这样我们还是得和连接池建立socket连接啊?


不好意思有点儿晕,怎么解释都感觉解释不通……求大神答疑

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

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

发布评论

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

评论(2

我的鱼塘能养鲲 2022-09-08 19:29:44

不使用连接池:每次Http请求都会执行建立连接(tcp协议的3次握手),发送收取数据,然后断开连接
使用连接池:第一次Http请求会建立连接,发送收取数据,然后不断开连接,将这个连接(底层的端口,线程,Socket等等的资源)保存起来,于是下次请求的时候可以重复使用……

连接池维护有两点,服务端通常默认会有一个连接超时的时间设置,客户端……就是你自己的代码控制的了。

上代码,安卓的org.apache.http.client.HttpClient

clipboard.png

clipboard.png

你可以认为,所谓的连接池其实就是对HttpClient的优化设置(保存连接而不是立刻断开)。

另外,安卓官方推荐使用java.net.HttpURLConnection

clipboard.png

这种看似没有什么连接池的问题,其实是因为这个类的连接池是安卓官方实现的系统级的连接池。
好处就是不同的App应用可以共用连接池,还有省电什么的,坏处的话……我自己实测比HttpClient要慢。

UPDATE:
好吧,其实你的困惑貌似在于对Http协议的误解。
个人理解:
Http协议是一个ASCII编码的文本协议,请求头和请求主体之间用的换行符分割的,请求结束是使用Content-Length判断字节长度的。
Tcp协议是一个Byte级的协议,就比如你玩LOL,不是发个消息就断开连接了然后重新连接到服务器的……TCP有自己的连接包,断开包……
所以……
可以在同一个Tcp连接上(使用同一个Socket,同样的端口,同一个线程)执行多次Http请求……
所以……
才会有连接池这种节省资源提升效率的玩意儿。

UPDATE:
天哪,你不会是想说数据库JDBC的那种什么连接池吧=。=

心凉怎暖 2022-09-08 19:29:44

连接池是维护了一堆长连接,在你需要的时候拿一个来用就行了,用完之后也不需要断开,把它还到池里,所以节省了建立SOCKET的时间

然后,在客户端维护

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