HTTP协议中的短轮询、长轮询、长连接和短连接

2023-11-14

转自:https://www.cnblogs.com/Leo_wl/p/5397265.html

阅读目录

阅读目录

回到目录

HTTP协议中的短轮询、长轮询、长连接和短连接

返回顶部

引言

  

  最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码。在研究一个项目的时候,源码里面用到了HTTP的长轮询。由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短。

  了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解。如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下。

  

返回顶部

以前的误解

  

  很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。但LZ终究觉得对于长连接一直懵懵懂懂的,有种抓不到关键点的感觉。

  今天LZ通过一番研究,终于明白了这其中的奥秘。而之前,LZ也看过长连接相关的内容,但一直都是云里雾里的。这次之所以能在这么短的时间里搞清楚,和LZ自己技术的沉淀密不可分。因此,这里LZ借着这个机会,再次强调一下,千万不要试图去研究你研究了很久都整不明白的东西,或许是你的层次不到,也或许是你从未在实际的应用场景接触过,这种情况下你去研究,只会事倍功半,徒劳一番罢了。

  回到正题,既然说是误解,那么LZ的误解到底是什么?

  那就是LZ一直认为,HTTP连接分为长连接和短连接,而我们现在常用的都是HTTP1.1,因此我们用的都是长连接。

  这句话其实只对了一半,我们现如今的HTTP协议,大部分都是1.1的,因此我们平时用的基本上都是长连接。但是前半句是不对的,HTTP协议根本没有长短连接这一说,也正因为误解了这个,导致LZ对于长连接一直不明不白,始终不得其要领,具体下面一段会说到。

  网络上很多文章都是误人子弟,根本没有说明白这个概念。这里LZ要强调一下,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。

  之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说

  其实知道了以后,会觉得这很好理解。HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

  一个形象的例子就是,拿你在网上购物来说,HTTP协议是指的那个快递单,你寄件的时候填的单子就像是发了一个HTTP请求,等货物运到地方了,快递员会根据你发的请求把货物送给相应的收货人。而TCP协议就是中间运货的那个大货车,也可能是火车或者飞机,但不管是什么,它是负责运输的,因此必须要有路,不管是地上还是天上。那么这个路就是所谓的TCP连接,也就是一个双向的数据通道。

  因此,LZ现在甚至觉得,“HTTP连接”这个词就不应该出现,它只是一个应用层的协议,根本就没有所谓的连接这一说,就像FTP也是应用层的协议,但是你有听说过FTP连接吗?(恩,好像是听过,-_-,但你现在知道了,其实所谓的FTP连接,严格来说,依旧是TCP连接)

  实际上,说HTTP请求和HTTP响应会更准确一些,而HTTP请求和HTTP响应,都是通过TCP连接这个通道来回传输的。

  不管怎么说,一定要务必记住,长连接是指的TCP连接,而不是HTTP连接。

  

返回顶部

一个疑问

  

  之前LZ一直对一件事有些模糊不清,首先是怎么样就算是把HTTP变成长连接了,是不是只要设置Connection为keep-alive就算是了?

  如果是的话,那都说HTTP1.1默认是长连接,而观察我们平时开发的Web应用的HTTP头部,Connection也确实是keep-alive,那就是说我们大部分都是用的长连接,但是长连接不是一般用于交互比较频繁的应用吗?像我们这种普通的Web应用,比如博客园这种,或者我的个人博客这种,长连接有什么用?

  如果有用那用处到底是什么,我们又不是客户端与服务器交互频繁的那种应用(毕竟你打开网页肯定要半天才打开另外一个吧),如果没用的话,那到底应不应该把Connection为keep-alive这个header值给改掉,从而改成短连接?

  这个疑问,在LZ明白了长连接其实是指的TCP连接之后,基本上就明白了。而这个疑问,也正是LZ在“以前的误解”那一段所提到的,那个因为误解导致LZ一直搞不明白的问题。

  为什么解决了上面那个误解之后,前面所说的这些疑问LZ都明白了?

  因为长连接意味着连接会被复用,毕竟一直保持着连接不就是为了重复使用嘛。但如果长连接是指的HTTP的话,那就是说HTTP连接可以被重复利用,这个话听起来就感觉很别扭。之所以觉得别扭,其实就是LZ的一种直觉,没什么理论依据。而这种别扭的根源就在于,之前一直没有融会贯通的感觉,所以总感觉缺少点什么。不过这点疑惑,并没有影响LZ的工作,因此也就没深究过。

  但现在好了,明白了长连接实际上是指的TCP连接,LZ瞬间自己就想明白了上面的那些问题。

  第一个问题是,是不是只要设置Connection为keep-alive就算是长连接了?

  当然是的,但要服务器和客户端都设置。

  第二个问题是,我们平时用的是不是长连接?

  这个也毫无疑问,当然是的。(现在用的基本上都是HTTP1.1协议,你观察一下就会发现,基本上Connection都是keep-alive。而且HTTP协议文档上也提到了,HTTP1.1默认是长连接,也就是默认Connection的值就是keep-alive)

  第三个问题,也是LZ之前最想不明白的问题,那就是我们这种普通的Web应用(比如博客园,我的个人博客这种)用长连接有啥好处?需不需要关掉长连接而使用短连接?

  这个问题LZ现在终于明白了,问题的答案是好处还是有的。

  好处是什么?

  首先,刚才已经说了,长连接是为了复用,这个在之前LZ就明白。那既然长连接是指的TCP连接,也就是说复用的是TCP连接。那这就很好解释了,也就是说,长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。

  比如你请求了博客园的一个网页,这个网页里肯定还包含了CSS、JS等等一系列资源,如果你是短连接(也就是每次都要重新建立TCP连接)的话,那你每打开一个网页,基本要建立几个甚至几十个TCP连接,这浪费了多少资源就不用LZ去说了吧。

  但如果是长连接的话,那么这么多次HTTP请求(这些请求包括请求网页内容,CSS文件,JS文件,图片等等),其实使用的都是一个TCP连接,很显然是可以节省很多消耗的。

  这样一解释,就很明白了,不知道大家看了这些解释感觉如何,反正LZ在自己想明白以后,有种豁然开朗的感觉。

  另外,最后关于长连接还要多提一句,那就是,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。

  这一点其实很容易理解,否则的话,TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止。现在想想,对于服务器来说,服务器里的这些个长连接其实很有数据库连接池的味道,大家都是为了节省连接重复利用嘛,对不对?

  

返回顶部

长轮询和短轮询

  

  前面基本上LZ已经把长短连接说的差不多了,接下来说说长短轮询,今天也正是为了研究长短轮询,LZ才顺便研究了下长短连接这回事。

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

  这个时候,你会怎么做?

  最简单的一种方式,就是你用JS写个死循环,不停的去请求服务器中的库存量是多少,然后刷新到这个页面当中,这其实就是所谓的短轮询。

  这种方式有明显的坏处,那就是你很浪费服务器和客户端的资源。客户端还好点,现在PC机配置高了,你不停的请求还不至于把用户的电脑整死,但是服务器就很蛋疼了。如果有1000个人停留在某个商品详情页面,那就是说会有1000个客户端不停的去请求服务器获取库存量,这显然是不合理的。

  那怎么办呢?

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

  而对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求,不同的是服务端,短轮询情况下服务端每次请求不管有没有变化都会立即返回结果,而长轮询情况下,如果有变化才会立即返回结果,而没有变化的话,则不会再立即给客户端返回结果,直到超时为止。 

  这样一来,客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量),而且也解决了服务端一直疲于接受请求的窘境。

  但是长轮询也是有坏处的,因为把请求挂起同样会导致资源的浪费,假设还是1000个人停留在某个商品详情页面,那就很有可能服务器这边挂着1000个线程,在不停检测库存量,这依然是有问题的。

  因此,从这里可以看出,不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满。之所以举这个例子,只是因为大家肯定都会网购,所以这个例子比较通俗一点。

  哪怕轮询解决不了获取库存这个问题,但只要大家明白了长短轮询的区别,这就足够了。实际上,据LZ自己平日里购物的观察,那个库存量应该是不会变的,这个例子纯属LZ个人的意淫,-_-。

  

返回顶部

长短轮询和长短连接的区别

  

  这里简单说一下它们的区别,LZ这里只说最根本的区别。

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

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

  

返回顶部

结语

  

  好了,本文就到此为止吧。LZ写这篇文章,主要也是为了避免自己遗忘。说实话,写到最后了,LZ感觉对于它们的理解又进了一步,这就是写博客的好处吧。

  写了这么多,最后给自己打个小广告(莫要拍砖,-_-),LZ每周都会在直播网站做直播,地址在博客左侧,如果想要了解直播的时间,可以加LZ的交流群,群号同样在博客左侧。直播的内容主要是带大家一起看源码,看书,或者解答各种疑难杂症的问题,包括但不限于技术、职场、人生、情感等。

  最最后,如果你有任务调度框架的需求,请考虑一下niubi-job,多的这里就不介绍了,请看LZ的博文。

  广告时间结束!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP协议中的短轮询、长轮询、长连接和短连接 的相关文章

  • linux 网络编程socket

    前言 socket 套接字 是linux下进程间通信的一种方式 通常使用C S 客户端 服务端 的方式通信 它可以是同一主机下的不同进程间通信或者不同主机的进程通信 socket是夹在应用层和TCP UDP协议层间的软件抽象 向应用层开发人
  • QT UDP简单的通信示例

    UDP user datagram protocol 即用户数据协议 是一个轻量级的 不可靠的 面向数据报的无连接协议 在qt中提供了QUdpSocket类来进行UDP数据报的发送和接收 在Pro中加入network模块 因为upd是无连接
  • ESP32使用AT MQTT 固件发布主题信息返回ERROR解决

    目录 发布格式 原因及其解决方法 发布格式 AT MQTTPUB lt topic gt lt data gt 0 0 当需要发布对应主题的json数据包时 错误格式 AT MQTTPUB 0 device date msg1 22 msg
  • SPI&CAN通信协议简介

    目录 1 SPI SPI的四种工作模式 CPOL clock polarity 时钟极性 CPHA clock phase 时钟相位 四种工作模式 2 CAN CAN的特点 物理层特征 通讯节点 CAN通信报文 数据帧介绍 远程帧 错误帧
  • 5G 的三大应用场景——ITU-R原文

    每次写 5G 的材料时都会提及 5G 的三大应用场景 虽然这是一个众人皆知的常识 但是如果不引用一下的话有些不严谨 苦于一直没找到 ITU 的原文 之前引用的都是移动通信教材那本书 今天狠下心来花时间找了原文 功夫不负有心人 可算给我找到了
  • VMware 下的CentOS6.7 虚拟机与Windows7通信

    在有网络的情况下 VMware 虚拟机使用桥接模式 Bridged 和NAT方式 会自动通信 但是在没有网络的情况下怎么办呢 对 是的 使用host only模式 如何设置呢 注 将Windows上的虚拟网卡改成跟Linux上的网卡在同一网
  • QT UDP简单的通信示例

    UDP user datagram protocol 即用户数据协议 是一个轻量级的 不可靠的 面向数据报的无连接协议 在qt中提供了QUdpSocket类来进行UDP数据报的发送和接收 在Pro中加入network模块 因为upd是无连接
  • STM32学习笔记:ESP8266模块(1)

    由于项目要求要涉及到物联网 公司要采用wifi 于是就采购了一块串口wifi模块 ESP8266 开始拿到后首先应该掌握的就是测试 熟悉AT指令 因为串口wifi通信是采用AT指令进行通信的 在这里需要注意一点的就是 在编写程序的时候 一个
  • HTTPS为什么安全 &分析 HTTPS 连接建立全过程

    本文将分两个专题去理解HTTPS 专题一 HTTPS为什么安全 1 http为什么不安全 http协议属于明文传输协议 交互过程以及数据传输都没有进行加密 通信双方也没有进行任何认证 通信过程非常容易遭遇劫持 监听 篡改 严重情况下 会造成
  • cocos2d-x客户端与Java服务器的通信(一)

    o 貌似自己已经有一段时间没有写博客了 其实主要原因还是觉得自己水平有限 加上上班实在是太忙 实在抽不出时间来写博客 言归正传 大家都知道 在网络游戏开发中 网络通信一直是个比较大的难题 一个服务器可能要同时处理几千上万甚至上百万的用户数据
  • MCP2515独立控制器

    1 简介 MCP2515 是一款独立控制器局域网络 Controller Area Network CAN 协议控制器 完全支持 CAN V2 0B 技术规范 该器件能发送和接收标准和扩展数据帧以及远程帧 MCP2515 自带的两个验收屏蔽
  • [深入研究4G/5G/6G专题-34]: URLLC-5-《中国联通5G URLLC技术白皮书3.0版本》解读-1-业务场景

    目录 第1章 背景与URLLC的发展历程 1 1 URLLC的应用场景 1 2 URLLC的业务特点 第2章 URLLC的业务需求
  • [4G&5G专题-120]:培训-跟小朋友聊通信

    用小孩子的语言与小朋友聊通信
  • 如何与西门子200 PLC建立连接

    更多关于西门子S7 200PLC内容请查看 西门子200系列PLC学习课程大纲 与西门子200 PLC建立连接很简单 分为以下几步 1 给S7 200PLC通电 按下图1 1所示连接PLC端口 然后给PLC供电 有直流24V和交流220V两
  • 蓝牙协议栈实现模式分析

    蓝牙协议栈实现模式分析 广州大学信息与机电工程学院 510405 邹艳碧 广州大学理学院 510405 吴智量 广州大学信息与机电工程学院 510405 李朝晖 摘要 蓝牙技术是未耒无线通信的一个重要的研究方向 本文主要介绍了蓝牙 技术的体
  • 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 通信原理(一) 通信原理概述

    文章目录 0 通信系统 1 通信方式 单工 双工与半双工 并行传输与串行传输 2 性能指标 2 1 有效性指标 2 2 可靠性指标 3 码 3 1 码字 码元 码长 3 2 码的分类 4 抽样与抽样定理 4 1 理想抽样和实际抽样 4 2
  • ZooKeeper系统模型之集群间消息通信。

    ZooKeeper的消息类型大体上可以分为四类 分别是 数据同步型 服务器初始化型 请求处理型和会话管理型 数据同步型 数据同步型消息是指在Learner和Leader服务器进行数据同步的时候 网络通信所用到的消息 通常有DIFF TRUN
  • JAVA socket编程实例

    转载文章 原作者无从考证 感谢作者的无私奉献 事实上网络编程简单的理解就是两台计算机相互通讯数据而已 对于程序员而言 去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了 Java SDK提供一些相对简单的Api来完成这些工作 Soc
  • 自协商功能原理及工作过程

    自协商原理 自协商是通过一种叫做快速连接脉冲 Fast Link Pulse 的信号实现的 简称FLP 自协商的双方通过FLP来交换数据 在具备自协商能力的端口没有Link的情况下 端口一直发送FLP 在FLP中包含着自己的连接能力信息 包

随机推荐

  • ajax传值 vue_vue2.0 axios post请求传参问题(ajax请求)

    最近需要做一个项目用vue 由于之前没接触过所以也想挑战下 我不会撘项目 果断选择网上现成搭好的项目 最后我们选择了vue element admin网上项目地址放这里 axios post请求问题 项目中用的ajax请求是 axios 废
  • Qt Creater快速定义函数的快捷键

    1 简介 在Qt creator中编写函数的时候 在头文件编写了函数 需要在相应的cpp文件中编写对应的函数定义实现 如果每次都需要手动的敲击全部的代码 这会非常的耗时耗力 显得很方便 这时候就需要巧妙的利用好Qt creator这款IDE
  • DOS 常用批处理命令

    一 call 功能 在批处理中调用别的批处理或者可运行程序 命令格式 CALL 驱动盘符 路径 文件名 参数 示例 call ex bat echo off call E RDA 8955 CSDTK4 CSDTKvars bat set
  • 苍蓝誓约服务器维护什么时候结束,《苍蓝誓约》2月13日09:00停服维护公告

    原标题 苍蓝誓约 2月13日09 00停服维护公告 尊敬的指挥官您好 我们计划将于2月13日09 00 2月13日11 00对作战海域进行停服维护 届时各位指挥官将无法进入游戏 停服时间会根据维护情况提前或顺延 维护结束后 各位指挥官将会收
  • win7 扩展双屏后 双屏同时显示任务栏

    扩展屏幕下都显示任务栏 第一步 Dual Monitor Taskbar 下载 下载链接 链接 http pan baidu com s 1pKxYUFL 密码 gu5c 第二步 安装完在扩展屏幕上便会出现任务栏 第三步 在扩展屏下任务栏中
  • 阅读有感——Verilog对数据进行四舍五入(round)与饱和(saturation)截位

    思考1 FPGA中只能定义定点数吗 首先 我没有搞清楚定点数与浮点数的定义 定点数就是小数位固定不变的数叫做定点数 也就是小数点是定在某个位置不变的数 结论 FPGA中的信号可以是定点型也可以是浮点型 这只是一种数据表示形式 各有优缺点 1
  • 【c++】vector的使用与实现

    目录 1 vector的介绍 2 vector的使用 2 1 vector 的构造 2 2 vector迭代器的使用 2 3 vector 空间方面的函数 2 4 vector 增删查改 2 5 vector 迭代器失效问题 3 vecto
  • Android开发—浅谈人脸检测的简易实现,成功定级腾讯T3-2

    findFaces 方法 Canvas类绘制人脸矩形区域 完整代码 最终效果图 结语 Android中的人脸检测 计算机视觉开发在近些年来越发火热 而关于人脸检测或识别等相应功能也成为了大家津津乐道的话题 在智能手机端领域中 人脸识别被广泛
  • Android混合使用service小技巧

    预备知识 Android四大组件之service 一 我想月薪过万的博客 CSDN博客https blog csdn net qq 41885673 article details 120816678 spm 1001 2014 3001
  • curl(文件传输工具)安装和基础使用

    cURL是一个利用URL语法在命令行下工作的文件传输工具 1997年首次发行 它支持文件上传和下载 所以是综合传输工具 但按传统 习惯称cURL为下载工具 cURL还包含了用于程序开发的libcurl ubuntu下的安装 安装curl 1
  • Android:线性布局介绍,线性布局weight属性,线性布局微调参数gravity,线性布局divider

    LinearLayout 线性布局 一 线性布局介绍 新建一个工程 然后我们默认的布局 是相对布局 相对布局的意思是我的控件可以在里面随意放置 那如果把这个RelativeLayout 改了呢 不用这相对布局 而是用线性布局 我们把代码都删
  • MySQL自治平台建设的内核原理及实践(下)

    本文整理自美团技术沙龙第75期的主题分享 美团数据库攻防演练建设实践 系超大规模数据库集群保稳系列 内含4个议题的PPT及视频 的第4篇文章 本文作者在演讲后根据同学们的反馈 补充了很多技术细节 跟演讲 视频 相比 内容更加丰富 文章分成上
  • JavaWeb—Request请求对象

    目录 一 概述 二 Request对象 2 1 Request继承体系 小结 2 2 Request获取请求数据 2 2 1 获取请求行数据 2 2 2 获取请求头数据 2 2 3 获取请求体数据 小结 2 2 4 获取请求参数的通用方式
  • 海康—SADP激活(设备网络搜索)

    海康sadp搜索工具 SADPTool 用于从网络上搜索同一网段内的所有在线设备 可以修改设备的缺省密码 修改网络IP地址及端口号 子网掩码及网关地址 IPV6地址网关地址 HTTP端口号和设备序列号 运行双击打开图标 转载于 https
  • Spring Boot 集成 Hive

    一 环境 二 依赖 三 配置 四 代码样例 五 参考 一 环境 Lombok JDK 1 8 0 281 MyBatis Plus 3 4 3 Spring Boot v2 3 7 RELEASE 二 依赖 其他依赖视个人情况添加
  • 算法系列--排序算法(四)快速排序

    快速排序是通过两个指针相互交换完成一次快速排序 类似于递归的二分排序 从交换上来讲比较像冒泡 为什么这么说呢 不管是插入还是直接 都需要在移动之前遍历元素 冒泡直接比较交换 上面的可能有点抽象 我是不太想抄一个百度定义去解释 可能对算法理解
  • javascript中的with()方法

    with 方法 with方法用于多次使用对象属性时 可简化多次编写同一对象的工作 例 js代码 var aa document createElement div 创建一个div赋给aa with aa style width 400px
  • 【 uniapp 】打包Android的apk(原生APP-云打包),及发布测试

    前言 跨端 小程序 Android IOS 项目开发好了 我们如何去利用 uniapp 的云打包去打包 apk 文件 然后上传测试呢 今天我们一起来学习一下 一步一步如何实现 目录 一 打包 Android 生成apk 1 原生APP 云打
  • 三天的C语言学习 小结(含基础代码)

    从八月一号开始学习B站鹏哥C语言 课程充实详细适合新手入门 我用的是Devc 编译器 虽然不咋先进但也能用 目标是每天学一节课可以的话多学一点再将其充分消化 慢慢总结 打好基础 慢慢提升 刚开始自学的话能做到这些也差不多了 等到大学的时候在
  • HTTP协议中的短轮询、长轮询、长连接和短连接

    转自 https www cnblogs com Leo wl p 5397265 html 阅读目录 一 引言 二 以前的误解 三 一个疑问 四 长轮询和短轮询 五 长短轮询和长短连接的区别 六 结语 阅读目录 HTTP协议中的短轮询 长