当网络通讯时采用TCP协议时,在真正的读写操做以前,server与client之间必须创建一个链接,当读写操做完成后,双方再也不须要这个链接时它们能够释放这个链接,链接的创建是须要三次握手的,而释放则须要4次挥手,因此说每一个链接的创建都是须要资源消耗和时间消耗的html
示意图:数据库
长链接:服务器
所谓长链接,指在一个TCP链接上能够连续发送多个数据包,在TCP链接保持期间,若是没有数据包发送,须要双方发检测包以维持此链接,通常须要本身作在线维持(不发生RST包和四次挥手)。 网络
链接→数据传输→保持链接(心跳)→数据传输→保持链接(心跳)→……→关闭链接(一个TCP链接通道多个读写通讯);
这就要求长链接在没有数据通讯时,定时发送数据包(心跳),以维持链接状态;并发
TCP保活功能,保活功能主要为服务器应用提供,服务器应用但愿知道客户主机是否崩溃,从而能够表明客户使用资源。若是客户已经消失,使得服务器上保留一个半开放的链接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的链接。socket
若是一个给定的链接在两小时内没有任何的动做,则服务器就向客户发一个探测报文段,客户主机必须处于如下4个状态之一:函数
短链接:网站
短链接是指通讯双方有数据交互时,就创建一个TCP链接,数据发送完成后,则断开此TCP链接(管理起来比较简单,存在的链接都是有用的链接,不须要额外的控制手段);spa
链接→数据传输→关闭链接;server
应用场景:
长链接多用于操做频繁(读写),点对点的通信,并且链接数不能太多状况,。每一个TCP链接都须要三步握手,这须要时间,若是每一个操做都是先链接,再操做的话那么处理速度会下降不少,因此每一个操做完后都不断开,次处理时直接发送数据包就OK了,不用创建TCP链接。例如:数据库的链接用长链接, 若是用短链接频繁的通讯会形成socket错误,并且频繁的socket 建立也是对资源的浪费。
而像WEB网站的http服务通常都用短连接(http1.0只支持短链接,1.1keep alive 带时间,操做次数限制的长链接),由于长链接对于服务端来讲会耗费必定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的链接用短链接会更省一些资源,若是用长链接,并且同时有成千上万的用户,若是每一个用户都占用一个链接的话,那可想而知吧。因此并发量大,但每一个用户无需频繁操做状况下需用短连好;
在长链接中通常是没有条件可以判断读写何时结束,因此必需要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。
转至:http://www.cnblogs.com/qqzy168/p/3141703.html
http://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html