您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

长链接、短链接与连接池

时间:2021-12-14 09:51:08  来源:  作者:架构即人生

原文:
https://gitlib.com/page/link-pool.html

在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四次挥手”示意图:

三次握手建立连接示意图:

长链接、短链接与连接池

 

四次挥手释放连接示意图:

长链接、短链接与连接池

 

长、短连接

长、短连接是相对通信时间而言的。长连接相对短连接而言,多了一个保持连接的过程,可以在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

短连接

短连接的操作步骤是:

建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次请求就完成了。这时候双方任意都可以发起close操作,不过一般都是client先发起close操作。上述可知,短连接一般只会在 client/server间传递一次请求操作。

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

长连接

长连接的操作步骤是:

建立连接——数据传输…(保持连接)…数据传输——关闭连接

client向server发起连接,server接受client连接,双方建立连接,client与server完成一次请求后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

TCP长连接保持的两种办法:

  • 应用层面的心跳机制

自定义心跳消息头.,一般客户端主动发送到服务端,服务器接收后进行回应(也可以不回应),以便能够侦测连接是否异常断开。

  • TCP协议自带的保活功能

通过设置TCP keepalive的属性,并设置发送底层心跳包的时间间隔。TCP keepalive是在底层定时发送心跳报文,服务器端接收到底层的心跳报文直接丢弃,不关心其内容。

长、短连接总结

  • 长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间;
  • 长连接需要进行链接存活探测;
  • 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段;
  • 短连接如果请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽;

 

HTTP协议

HTTP协议是无状态的,在HTTP/1.0中默认使用短连接,客户端和服务器每进行一次HTTP操作,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性,使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

连接池

基于TCP/IP协议,我们可以知道,频繁的连接创建和销毁都需要消耗资源,而连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接进行访问,这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。

以数据库连接池为例,基本原理如下:

  • 建立数据库连接池对象;
  • 按照事先指定的参数创建初始数量的数据库连接;
  • 对于一个数据库访问请求,直接从连接池中得到一个连接,如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接;
  • 关闭数据库连接,将连接放入空闲队列中,如实际空闲连接数大于初始空闲连接数则释放连接;
  • 释放数据库连接池对象,并释放所有连接;

连接池技术带来的好处:

  • 资源重用

由于连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及临时进程/线程的数量)。

  • 更快的系统响应速度

连接池在初始化过程中,往往已经创建了若干连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。

  • 统一的连接管理,避免连接泄漏

在较为完备的连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规连接操作中可能出现的资源泄漏。

常见连接池实现

php开发为例,基于PHP-FPM机制实现的Web服务,并不容易实现连接池,而常驻内存的开发框架,例如workerman、swoole 则可以简单实现连接池功能。PHP-FPM机制下的连接池需要借助第三方Proxy实现,例如:

  • php-cp:国内大神写的php第三方扩展,支持PDO与redis连接池,完美集成主流PHP开发框架;
  • SMProxy:一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池;


Tags:连接池   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  Tags: 连接池  点击:(16)  评论:(0)  加入收藏
Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他,例如 DBCP、C3P0、BoneCP、Proxool、JBoss、DataSource 等连接池,而且Druid已经在阿里巴巴部署了超过600个应用,通过了...【详细内容】
2021-06-17  Tags: 连接池  点击:(117)  评论:(0)  加入收藏
当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信。客户端必须使用数据库连接来发送命令和接收应答、数据。通过提供给客户端数据库的驱动指定连接字符...【详细内容】
2020-09-21  Tags: 连接池  点击:(96)  评论:(0)  加入收藏
一、前言基本上来说,大部分项目都需要跟数据库做交互,那么,数据库连接池的大小设置成多大合适呢?一些开发老鸟可能还会告诉你:没关系,尽量设置的大些,比如设置成 200,这样数据库性能...【详细内容】
2020-09-16  Tags: 连接池  点击:(97)  评论:(0)  加入收藏
本文作者 Xargin,个人博客:https://xargin.com/。http 标准库服务端请求处理package mainimport ( "io" "log" "net/http")func sayhello(wr http.ResponseWriter, r *http.Re...【详细内容】
2020-07-19  Tags: 连接池  点击:(46)  评论:(0)  加入收藏
一、前言为何要用http连接池那?因为使用它我们可以得到以下好处:因为使用它可以有效降低延迟和系统开销。如果不采用连接池,每当我们发起http请求时,都需要重新发起Tcp三次握手...【详细内容】
2020-06-13  Tags: 连接池  点击:(82)  评论:(0)  加入收藏
什么是连接池?顾名思义,连接池就是一堆预先创建好的连接,跟容器会有点像。连接池主要是在某种需要网络连接的服务,提前把连接建立好存起来,然后存放在一个池子里面,需要用到的时候...【详细内容】
2020-05-29  Tags: 连接池  点击:(77)  评论:(0)  加入收藏
每次新项目的时候,都要从头去找一遍数据库工具类。这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池。 连接池配置<connectionStrings>  <add name="dh_web" c...【详细内容】
2020-04-18  Tags: 连接池  点击:(66)  评论:(0)  加入收藏
来源 | 犀牛饲养员的技术笔记封图| CSDN 下载于视觉中国 背景介绍数据库连接池和线程池等池技术存在的意义都是为了解决资源的重复利用问题。在计算机里,创建一个新的资源...【详细内容】
2020-03-22  Tags: 连接池  点击:(78)  评论:(0)  加入收藏
什么是数据库连接池:连接池是一种常用的技术,为什么需要连接池呢?这个需要从TCP说起。假如我们的服务器跟数据库没有部署在同一台机器,那么,服务器每次查询数据库都要先建立连接,...【详细内容】
2020-03-04  Tags: 连接池  点击:(81)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条