keepAlive不是说TCP的常连接,当我们作为服务端,一个客户端连接上来,如果设置了keeplive为true,当对方没有发送任何数据过来,超过一个时间(看系统内核参数配置),那么我们这边会发送一个ack探测包发到对方,探测双方的TCP/IP连接是否有效(对方可能断点,断网)。如果不设置,那么客户端宕机时,服务器永远也不知道客户端宕机了,仍然保存这个失效的连接。
当然,在客户端也可以使用这个参数。客户端Socket会每隔段的时间(大约两个小时)就会利用空闲的连接向服务器发送一个数据包。这个数据包并没有其它的作用,只是为了检测一下服务器是否仍处于活动状态。如果服务器未响应这个数据包,在大约11分钟后,客户端Socket再发送一个数据包,如果在12分钟内,服务器还没响应,那么客户端Socket将关闭。如果将Socket选项关闭,客户端Socket在服务器无效的情况下可能会长时间不会关闭。
尽管keepalive的好处并不多,但是很多开发者提倡在更高层次的应用程序代码中控制超时设置和死的套接字。同时需要记住,keepalive不允许你为探测套接字终点(endpoint)指定一个值。所以建议开发者使用的另一种比keepalive更好的解决方案是修改超时设置套接字选项。
说白了:这个参数其实对应用层的程序而言没有什么用。可以通过应用层实现了解服务端或客户端状态,而决定是否继续维持该Socket。
分享到:
相关推荐
这是我在学习socket时对socket建立之后连接情况监测方法的总结,希望对你有所帮助。
nodejs-socket-keepalive 创建此项目是为了探索 Node.js 中套接字上 setKeepAlive() 选项的行为。 使用服务器和客户端从两端测试 KeepAlive 行为。 使用不同的机器和/或防火墙规则来模拟网络故障。 背景故事 曾经有...
TCP存活可以通过修改系统设置或者在tcp...设置keepalive之后,若tcp断开,则在使用该socket读写时立即失败。全部源代码,直接gcc命令就可以编译;运行本测试代码,然后拔掉主从之间的网线,主和从都可以检测到tcp断开。
springboot keepalive 服务端,客户端测试
TCP keepalive:TCP keepalive:参考于RFC1122 TCP内建的option,由c socket或kernel设置参数: TCP_KEEPCNT - tcp_keepalive_probes (重试几次决定断线) TCP_KEEPINTVL - tcp_keepalive_intvl(ACK传了多久没回应要重试)...
vue keepAlive缓存清除问题案例详解 vue项目中经常会用到keepalive来做缓存,在应付基本要求上可以说非常方便。但是遇到同一个页面,根据条件不同,分别缓存或者不缓存,就有些麻烦了。 首先先把坑列出来: 1. ...
基于QNX RTOS平台下的简单的Socket测试程序,分别给出了Server、和Client的编码示例。
丽塔:: Keepalive 待办事项:撰写宝石说明 安装 将此行添加到您的应用程序的Gemfile中: gem 'lita-keepalive' 然后执行: $ bundle 或将其自己安装为: $ gem install lita-keepalive 用法 待办事项:在此处写...
keepalive是在TCP中一个可以检测死连接的机制,作用是保持socket长连接不被断开,属于tcp层的功能,并不属于应用层。 TCP层怎么做到保持长连接的呢? 先看keepalive的用法:有三个参数,开放给应用层使用 sk->...
mysql主主复制+keepalive 这是keepalive1.1.17.tar.gz
Centos6.5安装keepalive步骤
主要介绍了Nginx中HTTP的keepalive相关配置,以及Nginx的Httpd守护进程相关的keepalive timeout配置,需要的朋友可以参考下
MySQL MHA KEEPALIVE最佳部署指南
KEEPALIVE安装配置手册 REDIS集群配置 各种算法分析
keepalive--aarch64.rar
Linux内置支持keepalive机制,为了使用它,你需要使能TCP/IP网络,为了能够配置内核在运行时的参数,你还需要procfs和sysctl的支持。 这个过程涉及到keepalive使用的三个用户驱使的变量: tcp_keepalive_time...
J2me中对HTTP 1.2中定义的KEEPALIVE支持得并不是很好,并不能获得一个http的长连接。对于JSE中http connection的实现还没验证。 使用Socket的一个好处是可以避免为每个网络请求建立单独的Connection。并且因为...
用VC6.0编写的TCP聊天程序,基于CAsycSocket的基础上.
判定断开前的KeepAlive探测次数舒服点
Keepalive+mysql主主同步图文教程