HTTP长连接、短连接、Linux网络优化
无连接
含义:每次传输完数据后就断开连接。
因为早期互联网规模小,并且http具有瞬时性,突发性,服务器同时处理着多个请求。所以采用无连接的方式。以便于腾出资源处理其他请求。
无状态
顺便说一说无状态
含义:
客户端向服务器请求完资源后断开连接,这个过程不记录任何东西。
产生的问题:
随着时间的推移,必须要记录用户的个人信息,而且需要登陆。
你不希望你前脚刚加入购物车的东西,后脚就不见了吧?
你也不希望你每次点击新的链接都要重新登陆吧?
Cookie和Session横空出世,用于记录用户信息。
无连接产生的问题及解决方案
产生的问题:
随着时间的推移,网页中嵌入了图片和其他元素,并且是以链接的方式嵌入。这就说明,客户端在请求完网页文件后,紧接着又会向服务器请求图片等静态资源。这样的话,无连接+多次请求就极大的浪费了带宽等资源(都浪费在TCP上了)。
解决方案:
使用长Keepalive长连接。
长连接
在HTTP/1.0中,默认使用的是短连接。
从HTTP/1.1起,默认使用长连接。
用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,一段时间后会断开。
比如:客户端和服务器之间会继续使用这个通道传输图片等资源。
服务器会和客户端保持一段空闲连接,在此期间他们可以无需连接传递数据。空闲时间到期后(默认2h),服务器会发送探测多个报文给客户端,如果都没有回应或回应断开连接的报文,则断开连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
关于TCP的连接,可以看我另一篇博客:TCP三次握手与四次挥手
可以看到,长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。
Linux网络优化
由于长连接会占用大量资源,典型的就是出现大量的TIME_WAIT。
可以通过下面的命令查看TIME_WAIT等状态的数量:
netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
可以通过修改内核文件来网络调优:
vim /etc/sysctl.conf
#TCP的配置
net.ipv4.tcp_syn_retries=2 #最多发起2次SYN请求(默认为5)
net.ipv4.tcp_fin_timeout=30 #FIN_WAIT_2时间
net.ipv4.tcp_max_syn_backlog = 4096 #SYN队列长度(默认为1024),增加以容纳更多等待连接数
net.ipv4.tcp_tw_reuse = 1 #开启TIME-WAIT sockets重用机制(默认为0,即关闭),可重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 1 #开启TIME-WAIT sockets快速回收(默认为0,即关闭)
net.ipv4.tcp_syncookies = 1 #当SYN等待队列溢出时,启用cookies来处理(默认为0,即关闭),可以防范少量SYN攻击
#http的keepalive长连接的配置
net.ipv4.tcp_keepalive_time=1200 #空连接可以保持1200s
net.ipv4.tcp_keepalive_probes=5 #空连接结束后发送探测报文的个数(都未回应则断开连接)
net.ipv4.tcp_keepalive_intvl=20 #每个探测包的间隔时间
#其他配置
net.core.netdev_max_backlog=3000 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
sysctl -p #加载内核文件
HTTP长连接、短连接、Linux网络优化的更多相关文章
- 长连接 短连接 RST报文
https://baike.baidu.com/item/短连接 短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数 ...
- nginx 代理tcp长连接短连接配置
https://blog.csdn.net/tayinyinyueyue/article/details/78932697 nginx使用ngx_stream_core_module模块代理tcp长连 ...
- HTTP长连接短连接
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
- MySQL 线程池&连接池&长连接&短连接
线程池 简介 1.mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2.每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3.线程的创建和销毁有一定的 ...
- java socket 长连接 短连接
长连接 是一旦一个客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障.这种技术在联机交易系统实现有利于提高效率. 短连接是客户端每发一个请 ...
- Socket 长连接 短连接 心跳 JAVA SOCKET编程
简单解释就是: 短连接:建立连接,发送数据包.关闭连接 长连接:建立连接.发送数据包,发送心跳包,发送数据包,发送心跳包.发送心跳包. ..... 所以又频繁的数据收发的话.短连接会频繁创建TCP连接 ...
- [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更 ...
- [PHP] time_wait与长连接短连接
服务端上查看tcp连接的建立情况,直接使用netstat命令来统计,看到了很多的time_wait状态的连接.这些状态是tcp连接中主动关闭的一方会出现的状态.该服务器是nginx的webserver ...
- tcp & 长连接 短连接
参考文档: tcp协议 http://blog.chinaunix.net/uid-26833883-id-3627644.html 长连接和短连接 http://blog.csdn.net/free ...
- http 长连接 & 短连接
1.意义 同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法. 2.优 较少的CPU和内存的使用 允许请求和应答的HTTP pipelining 降低网 ...
随机推荐
- STM32 USART串口通信
一.介绍 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择.它支持同步单向 ...
- 01.Markdown 语法
标题 # 一级标题 ## 二级标题 ### 三级标题 ...(最多六级标题) 字体 **hello**:粗体 *hello*:斜体 三个*:粗体+斜体 ~~hello~~:删除线 引用 > 引用 ...
- Git:如何撤销已经提交的代码
日常操作流程 本地工作区(尚未暂存) ---> add . 到暂存区 ---> commit 到本地仓库 ---> pull拉取关联远程仓库分支合并到本地的分支---> pus ...
- Javascript返回顶部和砸金蛋,跑马灯等游戏代码实现
1. 我们经常写页面的时候会遇到页面很长需要做返回顶部的操作:$("id /class").animate({scrollTop:$('.class').offset().top} ...
- Pageoffice6 实现后台批量转PDF文档
在实际项目开发中如果遇到批量动态生成PDF文档的需求,只需参考后台批量生成PDF文档,目前网上也有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案 ...
- java学习之旅(day.12)
异常机制(Exception) 异常指程序运行中出现的不期而至的各种状况 异常分类: 检查性异常:用户输入错误引起的异常 运行时异常:写的时候未报错,但一运行就会报错, 错误(error):错误不是异 ...
- 记一次DRF问题排障
1 最近在搞django,在写一个接口的时候用到了APIview,之后再调用接口的时候一直显示405,不允许使用post方法 视图
- npm 错误,ERESOLVE unable to resolve dependency tree 解决方案
参考:https://blog.csdn.net/qq_42055933/article/details/132098617 背景: 当在使用npm install时遇到 "ERESOLVE ...
- MySQL如何查询某个字段含有字母数字的值
在MySQL中,要查询某个字段含有字母和数字的值,可以使用正则表达式配合REGEXP操作符.以下是一个详细的示例,说明如何编写这样的查询. 假设我们有一个名为my_table的表,其中有一个名为my_ ...
- 基于 OAuth2.0 协议的单点登录系统方案设计
一.什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一.SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用 ...