上午在实验室看书,师弟让我帮忙解决个项目上的问题,问题不难,于是我教他抓包解决,让他电脑下了fiddler不过却显示不出来请求,我尝试了一下也是如此,过滤器也没开,突然意识到可能是360的问题,因为fiddler是通过http代理的方式,360很可能阻止第三方软件对浏览器代理,于是关掉360,重启浏览器终于能愉快的抓包了。

调试过程中我让他F12勾上disable cache,然后眼睛被一个词语吸引住了---Connection: Keep-Alive

当时很疑惑,http明明是无连接无状态的,那么这里的keepalive是指什么?

实际上它是一种TCP复用,每次http请求都需要tcp三次握手,浪费资源和时间,因此我们可以保持tcp通道连接一段时间,这样一次tcp连接就可以维持几次http请求。


在此基础上,还需要搞清楚几个其他的名词:长轮询,段轮询

长连接是为了tcp复用,那么这两个词是做什么的呢?先说个例子:

短轮询相信大家都不难理解,比如你现在要做一个电商中商品详情的页面,这个详情界面中有一个字段是库存量(相信这个大家都不陌生,随便打开淘宝或者京东都能找到这种页面)。而这个库存量需要实时的变化,保持和服务器里实际的库存一致,怎么实现?

长轮询这个时候就出现了,其实长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒)。在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止。

很明显,使用长轮询客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量)。但是如果大量客户端都在请求库存,服务端用多个线程来挂起请求,这样服务器的压力也太大了吧。因此长轮询也是有适用场景的。


区分下长轮询和长短连接,他们最根本的区别是:

第一个区别是决定的方式,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。

第二个区别就是实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。


总之,记住这一点:长连接是指的TCP连接,而不是HTTP连接。HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说

转载于:https://www.cnblogs.com/ZoHy/p/11331058.html

Connection: Keep-Alive相关推荐

  1. 转载:有关SQL server connection Keep Alive 的FAQ(3)

    转载:http://blogs.msdn.com/b/apgcdsd/archive/2012/06/07/sql-server-connection-keep-alive-faq-3.aspx 这个 ...

  2. 有关SQL server connection Keep Alive 的FAQ(3)

    这个是SQL Server Keep Alive FAQ文章的最后一篇. 问题1:为什么我在客户端设置了KeepAlive值,但是我使用SQL server management studio 测试的 ...

  3. 有关SQL server connection Keep Alive 的FAQ(2)

    这篇文章再进一步讨论有关Keep Alive的几个问题. 1.Keep Alive机制,是否只和特定的provider有关,比如SQL native client, odbc, oledb, ADO等 ...

  4. 通过mongodb客户端samus代码研究解决问题

    最近有项目需要用到mongodb,于是在网上下载了mongodb的源码,根据示例写了测试代码,但发现一个非常奇怪的问题:插入记录的速度比获取数据的速度还要快,而且最重要的问题是获取数据的速度无法让人接 ...

  5. python有道词典-Python爬取有道词典

    from urllib import request,parse import hashlib import random import time import json #定义md5加密函数 def ...

  6. python爬虫——论抓包的正确姿势和学好Javascript的重要性(1)

    没事想爬下数据,就入了scrapy坑,跟着https://zhuanlan.zhihu.com/data-factory这篇教程走,中间被小数量的网站坑过,不过还是写出了爬虫~~ 切糕王子:毫无防御, ...

  7. Scrapy定向爬虫教程(三)——爬取多个页面

    本节内容 本部分所实现的功能是,批量的爬取网页信息,不再是像以前那样只能下载一个页面了.也就是说,分析出网页的url规律后,用特定的算法去迭代,达到把整个网站的有效信息都拿下的目的. 因为本部分讲完后 ...

  8. Ubuntu 16.04+.Net Core+Docker+Nginx安装部署

    前言 最近公司的项目打算移植到.Net Core平台,所以调研了一下.Net Core在Linux下的安装部署.本篇文章会一步步的描述从安装到配置到部署的全部过程.在文章的结构和内容里,笔者借鉴了很多 ...

  9. CS144 lab4 计算机网络实验 笔记

    CS144 lab4 计算机网络实验 笔记 介绍 本实验中,我们将组合TCP sender和TCP receiver实现一个完整的TCP connection TCP是全双工连接,所以两方可以同时接收 ...

  10. TF使用例子-情感分类

    北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 正文共10052个字,4张图,预计阅读时间26分钟. 这次改写一下 ...

最新文章

  1. 分治法求解最大子数组问题
  2. html背景过大,html – CSS – 背景大小:封面太大了
  3. Defend Your Country
  4. 3dmax如何拆分模型_3dmax制作装饰柜1
  5. 关于深度学习框架Hamaa与Python API文档生成工具Sophon
  6. linux命令栏下访问oracle,linux下远程连接oracle数据库
  7. 大数据时代下的信息安全
  8. Struts2 注解
  9. Seaweedfs上传大文件_large file
  10. 《按自己的意愿过一生》语录二
  11. Windows10 mysql解决MySQL服务无法启动 系统出错 发生系统错误 1067
  12. LED指示灯在常见网络设备故障诊断中的应用
  13. 创业:房多多--如何成功从红海杀出一片天空
  14. java程序员的转正述职ppt
  15. MySQL中登录报错_mysql登录报错 ERROR 1045 (28000)
  16. 人工智能html5背景,HTML5人工智能基础及实践
  17. 域控服务器可以加几个辅域,如何搭建AD域控的辅域控(20200927213255).docx
  18. 探秘前端 CRDT 实时协作库 Yjs 工程实现
  19. nginx快速配置参考
  20. 记录自己第一次科研经历

热门文章

  1. Java中swing修改左上角的图标
  2. oracle临时表空间组
  3. 通达信经典指标组合图文详解
  4. Linux 十四 修改文件操作权限 用户文件权限详解
  5. C++:单例模式——线程安全模式、饥汉模式、懒汉模式
  6. 科赫雪花c语言程序设计,用 C 语言画科赫雪花
  7. 怎样才能从Java初级程序员成长为一名合格的架构师?
  8. MAML论文阅读笔记--回归实验
  9. ArcGIS Pro创建企业级地理数据库(Postgis)
  10. 电机控制基础之坐标变换(Clark变换及反变换 + Park变换及反变换 + 推导 + 仿真)