长连接与短连接

使用TCP协议时,会在客户端和服务器之间建立一条虚拟的信道,这条虚拟信道就是指连接,而建议这条连接需要3次握手,拆毁这条连接需要4次挥手,可见,我们建立这条连接是有成本的,这个成本就是效率成本,简单点说就是时间成本,你要想发送一段数据,必须先3次握手(来往3个包),然后才能发送数据,发送完了,你需要4次挥手(来往4个包)来断开这个连接。

其二,CPU资源成本,三次握手和4次挥手和发送数据都是从网卡里发送出去和接收的,还有其余的设备,比如防火墙,路由器等等,站在操作系统内核的角度来讲,如果我们是一个高并发系统的话,如果大量的数据包都经历过这么一个过程,那是很耗CPU的。

其三,每个socket是需要耗费系统缓存的,比如系统提供了一些接口设置socket缓存的,比如:

/proc/sys/net/ipv4/tcp_rmem

/proc/sys/net/ipv4/tcp_wmem

/proc/sys/net/ipv4/tcp_mem

keepalive机制

TCP连接一旦建立后,是不是这个连接可以一直保持? 答案是否定的,操作系统在实现TCP协议的时候都做了一个限制,这个限制可以参考配置:

cat /proc/sys/net/ipv4/tcp_keepalive_time

cat /proc/sys/net/ipv4/tcp_keepalive_intvl

cat /proc/sys/net/ipv4/tcp_keepalive_probes

我们看到默认这个tcp_keepalive_time的值为7200s,也就是2个小时,这个值代表如果TCP连接发送完最后一个ACK包后,如果超过2个小时,没有数据往来,那么这个连接会断掉。那么我们如何才能保持住这个连接呢?实际上,这就是TCP的keepalive机制,哦,说法不严谨,TCP协议并没有规定如此,但是很多的操作系统内核实现TCP协议时,都加上了这个keepalive机制,那么这个功能默认是关闭的,那这个keepalive机制到底是如何的呢?也就是,如果TCP之间没有任何数据来往了在tcp_keepalive_time(7200s,2h)后,服务器给客户端发送一个探测包,如果对方有回应,说明这个连接还存活,否则继续每隔tcp_keepalive_intvl(默认为75s)给对方发送探测包,如果连续tcp_keepalive_probes(默认为9)次后,依然没有收到对端的回复,那么则认为这个连接已经关闭。

tcp keepalive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效。当然事先我们可以修改这些默认值,方法如下:

在Linux中我们可以通过修改 /etc/sysctl.conf 的全局配置:

net.ipv4.tcp_keepalive_time=7200

net.ipv4.tcp_keepalive_intvl=75

net.ipv4.tcp_keepalive_probes=9

添加上面的配置后输入 sysctl -p 使其生效,你可以使用 sysctl -a | grep keepalive 命令来查看当前的默认配置

tcp keepalive可以通过设置TCP选项设置,设置方法如下:

#include

int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);

我们在需要使能Keepalive的socket上面调用setsockopt函数便可以打开该socket上面的keepalive。

第一个参数是要设置的套接字 第二个参数是SOL_SOCKET 第三个参数必须是SO_KEEPALIVE 第四个参数必须是一个布尔整型值,0表示关闭,1表示打开 最后一个参数是第四个参数值的大小。

示例:

int keepalive = 1;

setsockopt(incomingsock,SOL_SOCKET,SO_KEEPALIVE,(void*)(&keepalive),(socklen_t)sizeof(keepalive));

int keepalive_time = 30;

setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPIDLE,(void*)(&keepalive_time),(socklen_t)sizeof(keepalive_time));

int keepalive_intvl = 3;

setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPINTVL,(void*)(&keepalive_intvl),(socklen_t)sizeof(keepalive_intvl));

int keepalive_probes= 3;

setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPCNT,(void*)(&keepalive_probes),(socklen_t)sizeof(keepalive_probes));

设置SO_KEEPALIVE选项来开启KEEPALIVE,然后通过TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT设置keepalive的保活时间、间隔、次数等参数。

oracle数据库长连接和短连接,tcp 长连接与短连接相关推荐

  1. TCP(HTTP)长连接和短连接区别和怎样维护长连接

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

  2. [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接

    原文链接 一.HTTP协议和TCP协议 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题, ...

  3. Python--长连接与短链接(TCP)

    HTTP的长连接和短连接本质上是TCP长连接和短连接 1.短链接 浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web页中 ...

  4. HTTP协议浅谈(一)之TCP长连接

    之前的认识 刚接触HTTP请求就听说过HTTP请求有1.0和1.1两个版本(其实还有个0.9版本,因为只接受GET一种请求,不支持POST方法,因此客户端无法向服务器传递太多信息而为人们所忽略),而且 ...

  5. DataStage8.7连接远程Oracle数据库

    ♣参考资料: http://www-01.ibm.com/support/docview.wss?uid=swg21441132 http://space.itpub.net/6126/viewspa ...

  6. datastage连接mysql库_DataStage8.7连接远程Oracle数据库

    1.软件环境 1).DataStage 8.7 2).RHEL6.2 3).Oracle Client11g(R1) 说明:DataStage要连接oracle数据库,通常情况下,有两种方式,一种是O ...

  7. 连接oracle数据库 ip,oracle 设置ip连接数据库

    使用E-MapReduce集群sqoop组件同步云外Oracle数据库数据到集群hive E-MapReduce集群sqoop组件可以同步数据库的数据到集群里,不同的数据库源网络配置有一些差异网络配置 ...

  8. plsql连接oracle数据库

    步骤 (1)线上安装oracle数据库(已配好) (2)本地远程连接.安装oracle客户端(运行时) (3)安装plsql. (4)oracle客户端可以不用配置,直接在plsql中数据访问验证 转 ...

  9. TP5 连接oracle数据库

    一.Oracle官方网站下载安装Oracle客户端. 1,下载地址: 技术资源 | Oracle 中国 2,下载PHP 扩展Oracle客户端 DLL链接文件. PECL :: Package :: ...

  10. python连接oracle数据库_深入理解Python3.6连接Oracle数据库

    Python3.6连接Oracle数据库的方法详解 本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://p ...

最新文章

  1. Sql insert into 后获得自动插入的id
  2. 海思移植opencv+车辆检测
  3. 北京君正集成电路的Newton平台--穿戴式
  4. android 锁屏解决方案,Android 实现锁屏的较完美方案
  5. Docker相关概念与安装(Docker-CE)
  6. navicat连接CentOS的mysql在创建存储过程时出现1146 - Table ‘mysql.proc’ doesn't exist的问题
  7. iis web.config 配置 经典模式_django部署在iis下,webconfig错误
  8. 【批处理】shift用法举例
  9. 智慧环卫车辆监控管理系统方案
  10. 阿里开源数据同步工具--DataX
  11. 【学渣告诉你】到底神马是傅里叶级数!!!!!!
  12. 最新优秀开源:车牌识别、车型分析、车流统计、违停检测统统行
  13. 西瓜视频蓝光1080P下载方法
  14. android 耗时分析,启动耗时分析(四)-具体方法耗时分析
  15. NCBI生物分类数据库(Taxonomy)
  16. cuil:吹牛营销大师
  17. 交换机的转发原理 |VLAN详解·图解 |VLAN间通信 |华为,思科配置
  18. Matlab中直线拟合的实现+求取斜率和截距
  19. OpenCV图像二值化,Python
  20. md文件转html文件

热门文章

  1. 江苏大学计算机学院在职研究生,江苏大学电子与通信工程在职研究生招生简章...
  2. H3C交换机关闭STP生成树协议的方法
  3. You tube music
  4. STM32F10X的IAP编程详解——开发指南
  5. linux命令sel是什么意思,sel
  6. c语言中随机排序函数,利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 用C语言编程...
  7. PCB生成BOM表、网络表添加logo并且输出为Gerber文件
  8. mpeg4和mp4格式一样吗?
  9. 动态规划解决TSP(旅行推销员问题)
  10. Java人工弱智算法_人工智障也刷题!Kaggle 入门之实战泰坦尼克号