长连接和短连接

摘要:
tcp保活功能是探测长连接存活状况。http的长连接和短连接,本质上是tcp层的长连接和短连接http1.0默认使用短连接,客户端和服务端每进行一次http操作,就建立一次连接,任务结束就中断连接。rpc使用长连接,当网络通信使用tcp协议时,在真正的读写操作前,需要完成3次握手,来建立连接。长连接多用于操作频繁,点对点的通讯,而且连接数不能太多。如果发送的探测包次数超过该值仍然没有收到对方响应,则认为连接已失效并关闭连接。

Tcp 保活功能,主要为服务器应用程序提供,服务器应用程序需要知道客户主机是否崩溃,从而可以代表客户使用资源.

如果一个给定的连接,在两个小时内没有任何的动作,则服务器就向客户发送一个探测报文段,客户主机可能有以下几种状态:1)客户主机依然正常运行,并从服务器可达,客户的 tcp 响应正常,而服务器也知道对方是正常的,服务器在两个小时后将保活定时器复位。2)客户主机已经崩溃,并且关闭或正在重新启动。在任何一种情况下,客户的 tcp 都没有响应,服务器不能收到对探测的响应,并在 75s 后超时,服务器总共发送 10 个这样的探测,每个间隔 75s。若服务器没有收到一个响应,他就认为客户主机已经关闭,并终止连接。

tcp 保活功能是探测长连接存活状况。

Tcp 的 keep-alive 是检查当前 tcp 是否还活着;http 的 keep-alive 是让一个 tcp 连接活多久,他们是不同层次的概念。

http的长连接和短连接,本质上是tcp层的长连接和短连接
(1) http 1.0 默认使用短连接,客户端和服务端每进行一次http操作,就建立一次连接,任务结束就中断连接。如果请求的html中有网络js和图片,则需要新建连接去取。
client发起请求--建立连接--server响应请求---发送消息--关闭连接

(2) http 1.1 默认使用长连接,在使用的http协议,在响应头会加上 Connection:keep-alive,当一个网页打开完成之后,连接不会马上关闭,再次访问这个服务时,会继续使用这个长连接,而是在一段时间后关闭,这个时间可以在浏览器设置。

建立连接--数据传输......保持连接......数据传输--关闭连接

RPC比HTTP请求快的原因

(1)http使用http协议,rpc使用tcp协议,比http少了应用层,表示层,会话层,这3层。

(2)rpc使用长连接,当网络通信使用tcp协议时,在真正的读写操作前,需要完成3次握手,来建立连接。当读写完成时,需要四次握手来释放连接,每个连接的建立和释放都是需要资源和时间的,所以长连接比短连接更节省资源,效率更高。

长连接和短连接的优点和缺点

(1)长连接,可以省去较多的tpc建立和关闭操作,减少资源的浪费,节约时间。长连接多用于操作频繁,点对点的通讯,而且连接数不能太多。数据库的连接就是使用长连接,如果用短连接频繁通讯会造成socke错误,而且频繁的Socket创建和销毁也是对资源的消耗比较大。

(2)短连接,短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段,web网站一般使用短连接,因为长连接对服务端来说会消耗一定资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的,对资源消耗过大

tcp的keep-alive和http的Keep-alive
(1) Tcp的keepalive是检查当前tcp是否存活,表现就是当一个连接在一段时间没有数据传输是,一方会发一个心跳包,如果对方有回包则表明当前连接有效,继续监控。
这个“一段时间”可以设置。

# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75# cat /proc/sys/net/ipv4/tcp_keepalive_probes
9

tcp_keepalive_time,在TCP保活打开的情况下,如果在该时间内没有数据往来,则发送探测包。即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2h)。
tcp_keepalive_probes 尝试探测的次数。如果发送的探测包次数超过该值仍然没有收到对方响应,则认为连接已失效并关闭连接。默认值为9(次)
tcp_keepalive_intvl,探测包发送间隔时间。默认值为75s。

(2) http的Keep-alive是让一个tcp连接活久点。在浏览器设置

HTTP1.0中默认是关闭的,需要在HTTP头加入"Connection: Keep-Alive",才能启用Keep-Alive;HTTP1.1中默认启用Keep-Alive,加入"Connection: close ",才关闭。

等待时长timeout的值可以在http client和http server中指定。比如在请求头(request header)中加入:

Keep-Alive: timeout=5, max=1000

表示让http server保持连接5秒钟,本次连接最大请求数1000次。如果http server也设置来http keep alive 的timeout值,那么以两者最小的时间为准。比如http server设置了timeout=3,则会在返回头(response header)中添加:

Keep-Alive: timeout=3, max=1000

这次连接会在接收到最后一次请求后的3秒钟,被http server断开。

免责声明:文章转载自《长连接和短连接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇div左右布局delphi PDF控件介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]TCP/IP 协议基础(一)

参考书籍为《图解tcp/ip》-第五版。这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述)、OSI参考模型、网络概念的本质、网络构建的设备等 下面是协议层从底层至顶层的一个模型图: 一、计算机网络的背景 1.1 计算机的发展 有人说:“20世纪最伟大的发明就是计算机”,自诞生伊始,计算机经历了一系列发展,从...

ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbohello/p/4398953.html 翻译:郝峰波 mail : fengbohello@qq.com ZeroMQ 官方地址 :http://api....

直观明了的总结TCP滑动窗口机制原理及作用

阅读需要对TCP报文头部字段以及它们的字段有一定了解。 一. 原理   TCP是全双工通信,因此每一方的滑动窗口都包括了接收窗口+发送窗口,接收窗口负责处理自己接收到的数据,发送窗口负责处理自己要发送出去的数据。滑动窗口的本质其实就是维护几个变量,通过这些变量将TCP处理的数据分为几类,同时在发送出一个报文、接收一个报文对这些变量做一定的处理维护。  ...

Nginx超时配置

Nginx超时配置1.client_header_timeout语法client_header_timeout time 默认值60s 上下文http server 说明指定等待client发送一个请求头的超时时间(例如:GET/HTTP/1.1).仅当在一次read中,没有收到请求头,才会算超时。如果在超时时间内,client没发送任何东西,nginx返...

TCP UDP (转)

互连网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。   TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行...

用tcping检查网站开放的端口

麦新杰之前分享过一款小巧玲珑工具软件:tcping,即在tcp层进行端口的ping。 tcping可以用来检查和确认我们的网站有哪些端口是开放的,使用很顺手。比如麦新杰这几天在研究如何关闭mysql的3306端口,就通过使用tcping工具来确认关闭端口是否成功。Linux下有有个netstat命令,总是对其输出看得云里雾里,虽然netstat -l的输出...