什么是长连接?
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生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. 如何进行机器学习框架选择
  2. 大数据教程(9.1)流量汇总排序的mr实现
  3. Ruby错误:iconv will be deprecated in the future, use String#encode instead.
  4. cuda 编 程(10) cuda 并行加速时间对比
  5. tesseract-ocr的安装及使用
  6. 如何通过httpd和DVD ISO在RHEL上配置yum本地源
  7. Java——类的继承
  8. jquery实现无刷新分页,跳转
  9. [10秒学会] - iOS录制屏幕 ReplayKit
  10. 6-2 某半导体存储器容量为16Kx8位,可选RAM芯片容量为4Kx4/片。地址总线A15~A0(低),双向数据线D7~D0(低),由R/W线控制读/写。请设计并画出该存储器的逻辑图,注明地址分配..
  11. Word serach(Medium)
  12. 中国游戏产业的多事之秋
  13. 新特效火爆抖音!各路神仙齐唱《蚂蚁呀嘿》,网友:短短几秒需一生来治愈
  14. android mediastore参数,从 mediastore Android获取全屏幕缩略图
  15. 阿里巴巴对工业互联网志在必得,阿里云如何啃硬骨头?
  16. itx机箱尺寸_鞋盒大小的ITX机箱初体验 | FORMULA X1装机展示
  17. 安卓应用开发 MyWeChat(二)
  18. 简约至上的产品设计(2)愿景是简单的指南
  19. 如何学好C语言--你的学渣朋友告诉你
  20. Acala TC4 糖果节历程总结

热门文章

  1. 新版谷歌浏览器怎么查找和改变编码格式(新版chrome中工具,设置编码功能取消,新版如何添加插件)
  2. 最新版去水印小程序源码/基于WordPress的短视频去水印小程序源码
  3. 数据库 SQL常用语句
  4. jqGrid 动态设置行选中、取消中选中 setSelection使用注意事项
  5. OFD文件转换成PDF格式,Java语言实现
  6. 利用靶区勾画的RT struct文件分析相关联的Dicom图像中肿瘤部分的CT(HU)值分布(升级版)
  7. oracle函数将多级标签逗号拼接的单个字段洗涤成仅含一级标签的字段
  8. 主键与唯一索引的区别
  9. 微信协议入门——原理篇
  10. Towards Emotional Support Dialog Systems论文笔记