什么是长连接?
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生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;
}
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
 
 
譬如 HTTP 的 Connection-alive 如果为 close,则 server 收到一个 request 并发送完一个 response 之后就会主动关闭连接,这就是短连接;如果 Connection-alive keep-alive 的话可以在一个 tcp 连接中交换多次对话。是这个定义?那就只是个程序结构设计问题了。

--------------------------------------------------------------------------------
长连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:
长连接:系统通讯连接建立后就一直保持。
短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;
通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。
具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也 就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接.
所以长短连接只是一个概念问题长短连接的socket,就是使用普通的socket函数,没有什么特殊的。(socket详解http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html)

数据库中长连接和短连接的区别分析相关推荐

  1. Mysql中长连接和短连接的区别

    长连接: 长连接是相对于短连接来说的.长连接指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包. mysql的长连接如果长期闲置,mysql会8小时后(默认 ...

  2. http和socket之长连接和短连接区别

    TCP/IP  TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.  在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.  在传输层中有TCP协议与UDP协议. ...

  3. socket解读,http和socket之长连接和短连接区别!

    TCP/IP  TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.  在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.  在传输层中有TCP协议与UDP协议. ...

  4. TCP长连接与短连接的区别

    TCP/IP   TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.  在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.  在传输层中有TCP协议与UDP协议 ...

  5. TCP长连接和短链接的区别及应用场景

    TCP长连接和短链接的区别及应用场景 TCP在真正的读写操作之前,服务端与客户端之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三次握手,释放则需要四 ...

  6. http的长连接和短连接的区别

    http的长连接和短连接的区别 一.长连接与短连接: 长连接:客户端与服务端先建立连接,连接建立后不断开,然后再进行报文发送和接收.这种方式下由于通讯连接一直存在. 短连接:客户端与服务端每进行一次报 ...

  7. 长连接和短连接的区别、长连接的实现

    长连接和短连接的区别及原理 一.长连接与短连接: 长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收.这种方式下由于通讯连接一直存在.此种方式常用于P2P通信 ...

  8. 长连接与短连接的区别以及使用场景

    首先介绍下短链接和长连接的区别: 短连接 连接->传输数据->关闭连接 比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接. 因为连 ...

  9. Http长连接和短连接的区别

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议. IP协议主要解决网络路由和寻址 ...

最新文章

  1. leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法
  2. Manifest merger failed with multiple errors, see logs
  3. 华菱重卡仪表指示说明_重卡档位多,换挡不利索,选个自动档的车它不香吗?...
  4. ubuntu14.04LTS openssh-server 手动安装配置步骤
  5. mysql dba系统学习(16)mysql的mysqldump备份 mysql dba系统学习(17)mysql的备份和恢复的完整实践
  6. bzoj 1598: [Usaco2008 Mar]牛跑步 [k短路 A*] [学习笔记]
  7. menu---A.2-基本算法实例
  8. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  9. python web框架哪个好_盘点:9款流行Web框架及其优缺点
  10. Facebook Messenger 被曝漏洞,可导致恶意软件获得持续访问权限(详细分析)
  11. [USACO13JAN]Painting the Fence【扫描线】
  12. 匿名函数自调的三种方法
  13. CSS中的position 和z-index
  14. 阿里大数据之路:数据模型篇大总结
  15. oracle 罗马数字处理,阿拉伯数字转罗马数字(Roman Numeral Converter)
  16. win10自带安全中心关闭方法
  17. JavaFx教程-03JavaFX Application的生命周期
  18. 家务计算机配置,笔记本电脑佳配置是什么样的
  19. JS监听鼠标滑轮事件
  20. 发表科技类论文的期刊《科技新时代》杂志简介及投稿须知

热门文章

  1. MTK MT7628芯片方案使用IQXEL的RF射频测试教程
  2. vivo手机为什么没有使用鸿蒙系统,华为推出鸿蒙系统,为何小米、OPPO、vivo手机品牌缺席合作...
  3. 该不该对减半行情抱有预期?| 一周问答热议
  4. 有没有可以刷python题的软件_这个工具,30分钟可以把科研人一天的工作都给干完!...
  5. 2022年十大接口测试工具合集《建议.收藏》
  6. android 飞入购物车,贝塞尔曲线实现物品飞入购物车效果
  7. win11中无法识别STM32 BOOTLOADER的解决方法
  8. 链游阴阳师:Defina Finance
  9. Linux 配置Node环境变量
  10. 计算机组成原理(七)——I/O系统