1、TCP长链接
在编程中,每每须要创建一条TCP链接,并进行长时间的处理。所谓的TCP长链接并无确切的时间限制,而是说这条链接须要处理不仅一项事务,链接的时间也不能肯定。或者说只处理一项事务,但链接的时间比较长。
正常状况下,一条TCP链接创建后,只要双不提出关闭请求而且不出现异常状况,这条链接是一直存在的,操做系统不会自动去关闭它,甚至通过物理网络拓扑的改变以后仍然能够使用。因此一条链接保持几天、几个月、几年或者更长时间都有可能,只要不出现异常状况或由用户(应用层)主动关闭。
2、TCP链接的正常中断
TCP链接在事务处理完毕以后,由一方提出关闭链接请求,双方经过四次握手(创建链接是三次握手,固然能够经过优化TCP/IP协议栈来减小握手的次数来提升性能,但这样会造成不规范或者不优雅的通讯)来正常关闭链接
3、TCP链接的异常中断
致使TCP链接异常中断的因素以下:
物理链接被中断
操做系统down机
程序崩溃
等等。
4、如何检测TCP链接已经中断
对于实时性要求较高的网络通讯程序,每每须要更加及时的获取已经中断的链接,从而进行及时的处理。但若是对方的链接异常中断,每每是不能及时的获得对方链接已经中断的信息,操做系统检测链接是否中断的时间间隔默认是比较长的,即使它可以检测到,但却不符合咱们的实时性需求,因此须要咱们进行手工去不断探测。
探测的方式有两种:
1、改变socket的keepalive选项,以使socket检测链接是否中断的时间间隔更小,以知足咱们的及时性需求。
2、在应用层使用heartbeat来主动检测。
原文连接:http://blog.163.com/tianle_han/blog/static/6617826201023053857239/