Socket之长连接、短连接

来源:互联网 发布:单片机c51和c52 编辑:程序博客网 时间:2024/04/29 11:11
        最近,大家都在讨论关于socket,谈到根源,脑子里还有很多模棱两可的概念。所以上网搜集了一点资料,加深一下理解,也希望大家能踊跃跟帖,发表一下自己的见解,把你们所理解的用通俗的语言跟上,共享一下哈,不胜感激!

        谈到socket,大家谈论比较多的还是关于长连接和短连接,何为长连接,短连接呢?顾名思义,所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。

        我们现在的程序中用的比较多的貌似就是长连接了,那么怎么才能保持长连接呢,经查资料得出,比较成熟的有两种方法:

        第一种是在应用层制定协议,发心跳包,这也是C#,JAVA等高级语言比较常用的方法。客户端和服务端制定一个通讯协议,每隔一定时间(一般15秒左右),由一方发起,向对方发送协议包;对方收到这个包后,按指定好的通讯协议回一个。若没收到回复,则判断网络出现问题,服务器可及时的断开连接,客户端也可以及时重连。

        第二种通过TCP协议层发送KeepAlive包。这个方法只需设置好你使用的TCP的KeepAlive项就好,其他的操作系统会帮你完成。操作系统会按时发送KeepAlive包,一发现网络异常,马上断开。

        但是这两种方法又各有什么利弊呢?发KeepAlive包的好处,是我们在应用层不需自己定协议,通信的两端,只要有一端设好这个值,两边都能及时检测出TCP连接情况。而且这些都是操作系统帮你自动完成的。这种方法也是有些缺陷的,Keepalive设置不合理时可能会因为短暂的网络波动而断开健康的TCP连接。

 

本文链接地址为:http://blog.csdn.net/yisampi2009/article/details/6602919

原创粉丝点击