1)概述:性能与短链接、长连接

1)长连接能尽量减少tcp握手、挥手的次数,从而提升性能。
2)短链接为每一个http请求进行tcp握手、挥手,性能损耗大。

2)短链接

HTTP (0.9/1.0)协议是个非常简单的协议,通信过程采用了简单的“请求 - 应答”方式。
它底层的数据传输基于 TCP/IP,每次发送请求前需要先与服务器建立连接,客户端收到响应报文后会[ 立即关闭tcp连接 ]。客户端与服务器的整个连接过程很短暂,所以就被称为"短连接"(shortlived connections)。短连接的缺点相当严重,因为在 TCP 协议里,建立连接和关闭连接都是非常"昂贵"的操作。

3)长连接(HTTP/1.1默认启用长连接)

HTTP 1.1协议就提出了“长连接”的通信方式,也叫"持久连接"(persistentconnections)、“连接保活”(keep alive)、“连接复用”(connection reuse)。思路上,用的就是"成本均摊"的思路,既然 TCP 的连接和关闭非常耗时间,那么就把这个时间成本由原来的一个"http请求 - http应答"均摊到多个"http请求 - http应答"上。虽然不能改善 TCP 的连接效率,但每个"http请求 - http应答"的无效时间就会降低不少,整体效率也就提高了。长连接的效果如下图所示:

4)长连接的小缺点(因此长连接也需要[ 在恰当的时间 ]关闭)

因为 TCP 连接长时间不关闭,服务器必须在内存里保存连接的状态,其实就是占用了服务器的资源。如果有大量的空闲长连接只连不发,就会很快耗尽服务器的资源。
所以,长连接需要[ 在恰当的时间 ]关闭 。关闭长连接,这在客户端或者服务器都能做到。
在客户端侧,可以在请求头里加上"Connection: close"字段,告诉服务器:“这次通信完成后就关闭tcp连接”。服务器看到这个字段,就知道客户端要主动关闭连接,于是在响应报文里也加上这个"Connection: close"字段,响应发送完毕后则调用Socket API关闭该TCP连接。

服务器端通常不会主动关闭tcp连接,但具备一些关闭长连接的策略。拿 Nginx 这种服务器来举例,它有两种方式:

  1. 使用"keepalive_timeout"指令,设置长连接的超时时间,如果在一段时间内tcp连接上没有任何数据流动则主动断开该tcp连接,从而避免空闲tcp连接占用服务器资源。
  2. 使用"keepalive_requests"指令,设置一个长连接上可发送的最大http请求次数。比如设置成 N,那么当 Nginx 在这个连接上处理了 N个请求后,也会主动断开该长连接。

5)连接的相关头字段

HTTP/1.1中的连接都会默认启用长连接。客户端不需要用头字段指定,只要向服务器发送了第一次请求,后续的http请求都会重复利用第一次打开的TCP连接,直到这个TCP连接被关闭。当然,也可在请求头里明确地要求使用长连接机制,使用的头字段是Connection: “keep-alive”。不过不管客户端是否显式要求长连接,如果服务器支持长连接,它总会在响应报文里放一个Connection: "keep-alive"头字段,告诉客户端: “我服务器是支持长连接的,接下来的http请求就复用这个TCP连接。”

http性能和长短连接相关推荐

  1. c java socket编程_java+swing C/s模式的socket编程与长短连接

    java+swing C/s模式的socket编程与长短连接 什么是socket 长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要 ...

  2. HTTP之原理,长短连接,响应码,三握四挥,八种方法

    文章目录 1 HTTP原理 1.1 HTTP协议与TCP/IP协议的关系 1.2 无状态的HTTP协议 2 长短连接详解 2.1 简介 2.2 TCP短连接 2.3 TCP长连接 2.4 长连接短连接 ...

  3. HTTP协议长短连接以及无状态

    实质上是TCP协议的长连接.短连接. 长连接省去了较多的TCP建立.关闭操作,减少了浪费,节约时间. 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段. 具体的应用场景 ...

  4. TCP系列05—连接管理—4、TCP连接的ISN、连接建立超时及TCP的长短连接

    一.TCP连接的ISN         之前我们说过初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(di ...

  5. 慢慢说计网:HTTP 长短连接

    小Q:什么是 HTTP 长连接? 慢慢:在 HTTP1.0 中,默认使用的是短连接,也就是服务端和客户端每进行一次 HTTP 请求,就建立一次连接,而建立一次连接需要三次握手,比较耗费时间. 从 HT ...

  6. 长连接短连接长短连接争长短

    摘要:其实还是这个老问题:记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html即使现在只有haproxy-nginx-磁盘文件比较少 ...

  7. socket协议 http协议的区别,长短连接,tcp/udp协议区别

    socket http协议的区别 简单来说,我们平常浏览的网页如果已http://开头的都是http协议传输到我们的浏览器的,而http是基于socket之上的,就是说http携带数据,socket提 ...

  8. 网络编程_HTTP协议_Web服务器_(TCP3次握手4次挥手,长短连接,伪静态、静态和动态)

    Python高级语法--网络编程--进阶学习笔记 文中案例参考: https://github.com/FangbaiZhang/Python_advanced_learning/tree/maste ...

  9. locust mysql_locust性能压测连接mysql,随机取出班级,绑定学生

    from locust import HttpLocust, TaskSet, task import pymysql import random class UserBehavior(TaskSet ...

最新文章

  1. Node.js与Sails~方法拦截器policies
  2. 在数量上超过微型计算机的是什么,在数量上超过微型计算机的是什么计算机
  3. 同步IO、异步IO的区别
  4. 使用curl操作InfluxDB
  5. 数学建模——支持向量机模型详解Python代码
  6. 阅读《第31次中国互联网络发展状况统计报告》,分析中国互联网发展趋势和特点...
  7. mysql 2008新建用户_Sql Server 2008数据库新建分配用户的详细步骤
  8. iOS之深入解析AppDelegate重构
  9. 开源不止,前进不息:2018 OpenInfra Days China来了!
  10. pyhon-matplotlib包-数据图形化
  11. OSChina 周三乱弹——真相往往令人内牛满面
  12. 红橙Darren视频笔记 仿酷狗侧滑效果
  13. 京东app html源码_哔哩哔哩源码泄露,看不懂怎么办?
  14. 自动驾驶之多传感器融合-硬件篇(激光雷达)
  15. [译] 如何让你的 React 应用完全的函数式,响应式,并且能处理所有令人发狂的副作用...
  16. 谎言,统计数据和供应商
  17. SAP中销售订单中的条件类型修改控制问题配置分析
  18. Robocup 仿真2D 学习笔记(一) ubuntu16.04 搭建 robocup 仿真2D环境
  19. hdu 3037 插板法组合 + lucas定理
  20. vs2008 项目类型设置

热门文章

  1. Robust Lane Detection from Continuous Driving
  2. 7620a路由mysql,7620A路由求助 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...
  3. rkwatchgod 看门狗配置,rockchip
  4. Kettle构建Hadoop ETL实践(六):数据转换与装载
  5. T0001.数据结构面试题---栈---获取最小值
  6. Lawliet|C语言——求斐波那契函数第N项
  7. 了解传输设备必备知识
  8. 系统安全博客3-windowsserver安全加固
  9. Lind.DDD.LindMQ的一些想法
  10. vmware 安装ghost系统注意