精华内容
下载资源
问答
  • 2020-09-24 11:11:14

    数据库里面,连接可以分为长连接和短链接;

    长连接
    是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。

    短连接
    是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

    注意

    建立连接的过程通常是比较复杂的,所以建议在使用中要尽量减少建立连接的动作, 也就是尽量使用长连接。

    但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因 为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断 开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉 (OOM),从现象看就是 MySQL 异常重启了。

    怎么解决这个问题呢?你可以考虑以下两种方案。
    1.定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后, 断开连接,之后要查询再重连。
    2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权 限验证,但是会将连接恢复到刚刚创建完时的状态。

    更多相关内容
  • 长连接和短链接的区别

    万次阅读 多人点赞 2020-03-14 18:05:47
    长连接意味着进行一次数据传输后,不关闭连接,长期保持连通状态。如果两个应用程序之间有新的数据需要传输,则直接复用这个连接,无需再建立一个新的连接。就像下图这样。 它的优势是在多次通信中可以省去连接建立...

    长连接意味着进行一次数据传输后,不关闭连接,长期保持连通状态。如果两个应用程序之间有新的数据需要传输,则直接复用这个连接,无需再建立一个新的连接。就像下图这样。
    在这里插入图片描述
    它的优势是在多次通信中可以省去连接建立和关闭连接的开销,并且从总体上来看,进行多次数据传输的总耗时更少。缺点是需要花费额外的精力来保持这个连接一直是可用的,因为网络抖动、服务器故障等都会导致这个连接不可用,甚至是由于防火墙的原因。所以,一般我们会通过下面这几种方式来做“保活”工作,确保连接在被使用的时候是可用状态:

    1.利用 TCP 自身的保活(Keepalive)机制来实现,保活机制会定时发送探测报文来识别对方是否可达。一般的默认定时间隔是 2 小时,你可以根据自己的需要在操作系统层面去调整这个间隔,不管是 linux 还是 windows 系统。

    2.上层应用主动的定时发送一个小数据包作为“心跳”,探测是否能成功送达到另外一端。 保活功能大多数情况下用于服务端探测客户端的场景,一旦识别客户端不可达,则断开连接,缓解服务端压力。
    提前多说一句,如果在做了高可用的分布式系统场景中运用长连接会更麻烦一些。因为高可用必然包含自动故障转移、故障隔离等机制。这恰恰导致了一旦发生故障,客户端需要及时发现哪些连接已处于不可用状态,并进行相应的重连,包括重新做负载均衡等工作。

    了解完了长连接,那么短连接就很容易理解了。短连接意味着每一次的数据传输都需要建立一个新的连接,用完再马上关闭它。下次再用的时候重新建立一个新的连接,如此反复。
    在这里插入图片描述

    它的优势是由于每次使用的连接都是新建的,所以基本上只要能够建立连接,数据就大概率能送达到对方。并且哪怕这次传输出现异常也不用担心影响后续新的数据传输,因为届时又是一个新的连接。缺点是每个连接都需要经过三次握手和四次握手的过程,耗时大大增加。

    另外,短连接还有一个致命的缺点。我们回到前面提到的维基百科对 socket 的定义,其中说到 socket 包含通信协议、目标地址、状态等。实际当你在基于 socket 进行开发的时候,这些包含的具体资源主要就是这 5 个:源 IP、源端口、目的 IP、目的端口、协议,有个专业的叫法称之为“五元组”。在一台计算机上只要这五元组的值不重复,那么连接就可以被建立。然而一台计算机最多只能开启 65535 个端口,如果现在两个进程之间需要通信,作为服务端的 IP 和端口必然是固定的,因此单个客户端理论上最多只能与服务端同时建立 65535 个 socket 连接。如果除去操作系统和其它进程所占用的端口,实际还会更少。所以,一旦使用不当,在很短的时间内建立了大量连接,端口很容易被占用完。这不但会导致自身无法正常工作,还会影响到同一台计算机上的其它进程。

    展开全文
  • 其实长连接是相对于通常的短连接而说的,也就是时间保持客户端与服务端的连接状态。 通常的短连接操作步骤是: 连接-》数据传输-》关闭连接; 而长连接通常就是: 连接-》数据传输-》保持连接-》数据传输-》...

    一 、什么是长连接?

    其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。

    通常的短连接操作步骤是:

    连接-》数据传输-》关闭连接;

    而长连接通常就是:

    连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;

    这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了

    什么时候用长连接,短连接?

    长连接主要用于在少数客户端与服务端的频繁通信因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费

    但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态

    总之,长连接和短连接的选择要视情况而定。

    首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。

    在 使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。如果是在mysql 5.1.6之前,那么则应在每次执行完real_connect 之后执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,则在connect之前执行一次就够了。

    查看mysql连接数:

    mysqladmin -uroot -p  processlist
    

    实际的测试中我发现,当设置了MYSQL_OPT_RECONNECT为1时,超时后再查看processlist,则自动建立的连接不在列表中,但事实上连接确实建立并被使用了。

    在MYSQL的默认设置中,如果一个数据库连接超过8小时没有使用(闲置8小时),服务器将断开这条连接,后续在该连接上进行的查询操作都将失败。网络上对该问题的描述非常多。也提供了相应的解决办法。我在这里提一些我自己的看法。

    解决办法一:修改MYSQL服务器的配置参数

    道理非常简单,MYSQL的默认设置是在数据库连接超过8小时没有使用后将其断开,如果我们将这个时间改成更大的数值,那么连接超时所需的时间就会更长,也就意味着更不容易超时。网络上提供的修改方法一般是修改/etc/my.cnf,在这个文件中添加一行wait_timeout=你需要设置的超时时间 。实际上有一种比较简单的方法来修改这个参数:

    首先作为超级用户登录到MYSQL,注意必须是超级用户,否则后面会提示没有修改权限。然后输入

    show global variables like 'wait_timeout';
    

    回车执行后显示目前的超时时间:

    +---------------+-------+
    
    | Variable_name | Value |
    
    +---------------+-------+
    
    | wait_timeout | 28800 |
    
    +---------------+-------+
    
    1 row in set (0.00 sec)
    

    上面显示的是默认的超时时间,即8个小时(单位是秒)。现在重新设置该参数,例如我们要将超时时间设置成10个小时,可以输入:

    set global wait_timeout=36000;
    

    回车执行,显示:

    Query OK, 0 rows affected (0.00 sec)
    

    表示设置成功,可以重新使用show global variables like 'wait_timeout’来验证。

    这种方法比较直观,而且设置的参数立即生效。但如果/etc/my.cnf中没有配置,则重启服务后,global变量会从/etc/my.cnf中读取新的变量值。

    下边是一段示例代码:

    if(!mysql_real_connect(&logdb, my_hostname, my_user, my_password, my_dbname, my_port, my_sock, 0)){ 
            ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", my_dbname, my_hostname); 
            use_mysql = 0; 
    } else { 
           char value = 1; 
           mysql_options(&logdb, MYSQL_OPT_RECONNECT, (char*)&value); 
            use_mysql = 1; 
    }
    

    二、Python与MySQL如何保持长连接

    介绍
    在python后端开发中,时常会与数据库交互,重复的断开、连接 会大大消耗数据库资源。
    所以一般都是定义全局变量,来弥补这个缺陷。
    但是 Python 与Mysql 长连接的过程中,如果长时间没有交互,它是会断开的。
    再次执行sql语句是就会报错。

    解决方案
    在执行sql前, ping一下连接是否正常。
    如果正常,则不受影响,正常执行sql就行了;
    如果异常,则需要重新连接数据库。

    # 此处为类中方法,相关参数也配置在了settings文件中
    def test_conn(self):
        try:
            self.conn.ping()
        except:
            self.conn = pymysql.connect(
                host=MYSQL_HOST,
                user=MYSQL_USER,
                password=MYSQL_PASSWORD,
                database=MYSQL_DATABASE,
                charset=MYSQL_CHARSET)
            self.cursor = self.conn.cursor()
    
    

    只需要在每次将执行sql前,调用一下这个方法即可。

    展开全文
  • TCP长连接和短链接及优缺点

    千次阅读 2020-02-17 17:25:09
    TCPUDP tcp:面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手断开连接 优点:在数据传输时,有确认、窗口、重传、拥塞控制机制,能保证数据正确性,较为可靠 缺点:速度相对慢一点,要求系统资源...

    TCP和UDP

    • tcp:面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手断开连接

    优点:在数据传输时,有确认、窗口、重传、拥塞控制机制,能保证数据正确性,较为可靠

    缺点:速度相对慢一点,要求系统资源较多

    • udp:面向无连接的通信协议,数据包括目的端口信息和源端口信息

    优点:面向无连接,操作简单,要求系统资源较少,速度快,由于不需要连接,可进行广播发送

    缺点:发送数据之前不需要与对方建立连接,接收到数据时也不需要发送确认信号,发送端不知道接收端是否正确接接收,不会重发,不可靠。

    长连接和短连接

    当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的
    Alt
    在这里插入图片描述

    长连接:

    所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。

    连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);

    这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态;

    TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。

    如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

    • 1、客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
    • 2、客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
    • 3、客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
    • 4、客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

    短连接:

    短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);

    连接→数据传输→关闭连接;

    总结:

    1:如果业务来往比较频繁,则选择长连接。
    2:如果server要主动给client发数据,则选择长连接。

    展开全文
  • TCP长连接和短链接的区别及应用场景 TCP在真正的读写操作之前,服务端与客户端之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接连接的建立通过三次握手,释放则需要四次挥手...
  • 其实长连接是相对于通常的短连接而说的,也就是时间保持客户端与服务端的连接状态。 通常的短连接操作步骤是: 连接-》数据传输-》关闭连接; 而长连接通常就是: 连接-》数据传输-》保持连接-》数据传输-》保持...
  • TCP的短链接和长连接

    千次阅读 2022-03-28 10:59:09
    在写网络编程项目的客户端的时候,出现了这样的疑问。在什么时候连接上服务器呢?...在我的认识里,TCP短连接和长连接的区别主要是三次握手和四次挥手之间的那段时间可以互发多少信息。短连接的话在客户
  • 长连接短链接的区别

    千次阅读 2019-07-28 13:27:31
    长连接短连接的概念是针对TCP连接的。TCP连接是一个双向通道,可以保持一段时间不关闭。 长连接是指在完成链路连接建立后,在链路空闲时并不结束这条链路,而是一直维持这条链路的连接,因此安全性较差。 短连接...
  • HTTP长连接和短链接

    千次阅读 2016-09-03 22:07:28
    1、什么是长连接短连接在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他...
  • 1 什么是长连接和短连接 三次握手四次挥手 TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立释放就是握手挥手的过程。 三次握手为连接的建立过程,握手失败则连接建立失败。 四次...
  • NULL 博文链接:https://stevenfeng.iteye.com/blog/2020762
  • http的长连接和短连接(史上最通俗!)

    万次阅读 多人点赞 2019-02-15 10:36:08
    ...但终究觉得对于长连接一直懵懵懂懂的,有种抓不到关键点的感觉。 今天通过一番研究,终于明白了这其中的奥秘。而之前,也看过长连接相关的内容,但一直都是云里雾里的。这次之所以能在这么...
  • Java实现Socket长连接和短连接

    千次下载 热门讨论 2014-09-21 11:32:43
    Java实现Socket长连接和短连接,实现原理可参见个人博客
  • TCP长连接和短链接

    千次阅读 2019-02-20 15:46:23
    短连接 长连接 keepalive功能 中间设备删除超时的连接过程 TCP keepalive交互过程 TCP keepalive带来的问题: 为什么需要长连接? http keepalive 与 TCP keepalive 参考:...
  • HTTP 的长连接和短连接

    千次阅读 2022-04-10 21:15:38
    HTTP 的长连接和短连接
  • 一.短连接:在每次获取数据时,客户端都会与服务器进行三次握手建立连接,接受完数据以后再四次挥手断开连接。即每次客户端获取数据,...1.短链接http协议为http1.0,长连接的http协议为1.1 2.短连接由于是每次用新
  • 长连接和短连接区别优缺点

    千次阅读 2020-11-27 10:22:38
    TCP与UDPudp:面向无连接的通信协议,数据包括目的端口信息和源端口信息优点:面向无连接,操作简单,要求系统资源较少,速度快,由于不需要连接,可进行广播发送缺点:发送数据之前不需要...
  • TCP长连接和短连接区别

    千次阅读 2020-03-02 11:19:18
    1.短连接 连接->传输数据->关闭连接 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接, 2.长连接 连接->传输数据->保持连接->传输数据->....->...
  • URL 长连接短链接

    热门讨论 2013-12-17 18:02:03
    android 中长连接短链接的几种方式集合,希望对大家有所帮助。。。
  • 长连接和短链接的解析

    千次阅读 2016-10-17 12:21:22
    HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上...
  • Socket长连接和短连接的区别

    万次阅读 2016-08-04 09:44:49
    短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器服务器每进行一次HTTP操作,就建立一次连接,但任务结束后就中断连接短连接是指SOCKET连接后发送后接收完数据后马上断开连接长连接 连接->传输数据->...
  • nginx长连接短连接性能对比

    千次阅读 2022-04-21 23:13:15
    nginx长连接短连接性能对比
  • 什么是长连接和短连接

    千次阅读 2018-11-06 18:18:35
    在日常项目中,大多的时候我们用的是短连接,一个请求过来,一个线程处理完该请求,线程被线程池回收,这个请求就关闭了.虽然这能满足很大部分的需求,但是也有些问题,比如说:如果客户端发的请求比较多,比较频繁,服务端就...
  • 首先介绍下短链接和长连接的区别: 短连接 连接->传输数据->关闭连接 比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 因为连接后接收了数据就断开...
  • 长连接可以保持打开,减少服务端创建释放连接的消耗,后面的程序访问的时候还可以使用这个连接。一般我们会在连接池中使用长连接。 保持长连接会消耗内存。时间不活动的连接,MySQL 服务器会断开。 show ...
  • TCP/IP第六期 长连接短连接

    千次阅读 2021-12-25 11:41:15
    短链接 ...定义:客户端与服务端的整个连接过程很短暂,不会与服务器保持时间的连接状态,所以就被称为短链接 操作步骤:下图我们可以看到每次短连接都会重新创建 缺点:资源浪费,时间 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,054
精华内容 60,821
关键字:

长连接和短链接