谈到socket,大家谈论比较多的还是关于长连接和短连接,何为长连接,短连接呢?顾名思义,所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。
我们现在的程序中用的比较多的貌似就是长连接了,那么怎么才能保持长连接呢,经查资料得出,比较成熟的有两种方法:
第一种是在应用层制定协议,发心跳包,这也是C#,JAVA等高级语言比较常用的方法。客户端和服务端制定一个通讯协议,每隔一定时间(一般15秒左右),由一方发起,向对方发送协议包;对方收到这个包后,按指定好的通讯协议回一个。若没收到回复,则判断网络出现问题,服务器可及时的断开连接,客户端也可以及时重连。
第二种通过TCP协议层发送KeepAlive包。这个方法只需设置好你使用的TCP的KeepAlive项就好,其他的操作系统会帮你完成。操作系统会按时发送KeepAlive包,一发现网络异常,马上断开。
但是这两种方法又各有什么利弊呢?发KeepAlive包的好处,是我们在应用层不需自己定协议,通信的两端,只要有一端设好这个值,两边都能及时检测出TCP连接情况。而且这些都是操作系统帮你自动完成的。这种方法也是有些缺陷的,Keepalive设置不合理时可能会因为短暂的网络波动而断开健康的TCP连接。
本文链接地址为:http://blog.youkuaiyun.com/yisampi2009/article/details/6602919