golang tcp keepalive研究记录(基于websocket)
为什么有tcp Keepalive?
服务器和客户端建立tcp连接以后,客户端/服务器如何知道对方是否挂掉了?
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟主机、营销软件、网站建设、梨树网站维护、网站推广。
这时候TCP协议提出一个办法,当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接已经丢失,客户端就没必要继续保持连接了。如果没有这种机制就会有很多空闲的连接占用着系统资源。
KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows)中,都实现了KeepAlive功能。
RFC1122#TCP Keep-Alives
tcp Keepalive是否默认开启?
KeepAlive默认情况下是关闭的,可以被上层应用开启和关闭
如何设置tcp keepalive?
在Linux内核设置
KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效。
查看当前的配置:
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes
本文名称:golang tcp keepalive研究记录(基于websocket)
地址分享:http://cdiso.cn/article/dsoichp.html