TCP长链接及短链接
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议
在传输层有TCP协议与UDP协议
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议
长连接
在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双上检测包以维持此连接,一般需要自己做在线维持。
大致过程为:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;
短连接
通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
大致过程为:
连接→数据传输→关闭连接;
什么时候用长连接,短连接
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。但长连接存在两个问题:1、存活功能周期太长;2、只单纯探测TCP连接的存活。在长连接的应用场景下,client端一般不会主动关闭他们之间的连接,client与server的连接如果一直不关闭,会导致客户端的连接越来越多。措施:1、可以关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;2、另外可以限制每个客户端的最大长连接数。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
长连接适用于请求频繁、点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连接好。