http长/短轮询和WebSocket 的介绍和比较

【1】http协议介绍
1)介绍:http协议是请求/响应范式的,每个http 响应都对应一个 http 请求,http协议是无状态的,多个http请求之间是没有关系的;
2)http协议的被动性:在标准的HTTP请求响应语义中,浏览器发起请求,服务器发送一个响应,这意味着在浏览器发起新请求前,服务器不能发送新信息给客户端浏览器;

【2】http 长轮询 和 短轮询
【2.1】http 长轮询
1)介绍:http 长轮询是server 收到请求后如果有数据,立刻响应请求;如果没有数据 就会 停留 一段时间,这段时间内,如果 server 请求的数据到达(如查询数据库或数据的逻辑处理完成),就会立刻响应;如果这段时间过后,还没有数据到达,则以空数据的形式响应http请求;若浏览器收到的数据为空,会再次发送同样的http请求到server;
2)http 长轮询 的缺点:server 没有数据到达时,http连接会停留一段时间,这会造成服务器资源浪费;
3)看个荔枝:假设有 1000个人停留在某个客户端页面,等待server端的数据更新,那就很有可能服务器这边挂着1000个线程,在不停检测数据是否发生变化,这依然是有问题的;

【2.2】http 短轮询
1)介绍:http 短轮询是 server 收到请求 不管是否有数据到达都直接响应http 请求;如果浏览器收到的数据为空,则隔一段时间,浏览器又会发送相同的http请求到server 以获取数据响应;
2) http 短轮询的缺点:消息交互的实时性较低(server端到浏览器端的数据反馈效率低);

【2.3】http 长轮询 和 短轮询的异同
1)相同点:当server 的数据不可达时,基于http长轮询和短轮询 的http请求,都会 停留一段时间;
2)不同点:http长轮询是在服务器端的停留,而http 短轮询是在 浏览器端的停留;
3)性能总结:从这里可以看出,不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满;

【3】WebSocket
1)介绍:WebSocket 是 html5 规范发布的新协议,和 http协议完全是两个不同的概念,或者说基本没关系;WebSocket 协议 和 http协议的唯一联系点在于,WebSocket 协议为了兼容现有浏览器的握手规范而采用了 http协议中的握手规范 以建立WebSocket连接;
2)WebSocket协议:其客户端与服务器建立的是 持久连接;
3)WebSocket 解决了 HTTP 的几个难题
3.1)难题1(http协议的被动性):采用 WebSocket 协议后,服务器可以主动推送消息给客户端;而不需要客户端以(长/短)轮询的方式发起http请求到server以获取数据更新反馈;这样一来,客户端只需要经过一次HTTP请求,就可以做到源源不断的信息传送了(在程序设计中,这种设计叫做回调,即:server 端有信息了再来通知client 端,而不是 client 端 每次都傻乎乎地跑去轮询server端 是否有消息更新);
3.2)难题2(http协议的无状态性/健忘性):短轮询是每次http请求前都要建立连接,而长轮询是相邻几次请求前都要建立连接;http请求响应完成后,服务器就会断开连接,且把连接的信息全都忘记了;所以每次建立连接都要重新传输连接上下文(下面有补充),将 client 端的连接上下文来告诉server 端;而 WebSockct只需要一次HTTP 握手,整个通讯过程是建立在一次连接(状态)中的,server 端会一直推送消息更新反馈到客户端,直到客户端关闭请求,这样就无需 客户端为发送消息而建立不必要的 tcp 连接 和 为了建立tcp连接而发送不必要的冗余的连接上下文消息;
4)连接上下文补充:连接上下文,如限定客户端和服务器平台的所有头信息,认证属性,负载描述等;看个荔枝:


【4】三种通信方式的优缺点

传统(短)轮询 长轮询 WebSocket
浏览器支持 几乎所有现代浏览器 几乎所有现代浏览器 IE 10+ Edge Firefox 4+ Chrome 4+ Safari 5+ Opera 11.5+
服务器负载 较少的CPU资源,较多的内存资源和带宽资源 与传统轮询相似,但是占用带宽较少 无需循环等待(长轮询),CPU和内存资源不以客户端数量衡量,而是以客户端事件数衡量。三种方式里性能最佳。
客户端负载 占用较多的内存资源与请求数。 与传统轮询相似。 同Server-Sent Event。
延迟 非实时,延迟取决于请求间隔。 同传统轮询。 实时。
实现复杂度 非常简单。 需要服务器配合,客户端实现非常简单。 需要Socket程序实现和额外端口,客户端实现简单。

【补充】http 长连接(tcp 连接可复用)
1)介绍:http协议 目前有两个版本:1.1 和 1.0;区别是 1.1支持 长连接(普遍使用http1.1版本),长连接也叫做持久连接(keep-alive);而1.0不支持长连接,在1.0版本下,每个http请求响应后都会关闭tcp连接,下一次http请求会重新建立http连接;
2)http 长连接:多个http 请求共用同一个 tcp 连接,这样可以减少相邻多次 http请求导致的 tcp连接建立和关闭的资源消耗;http1.1 在请求头和响应头中用 connection 字段标识 该http连接是否是 长连接,即connection: keep-alive 表示长连接;而 connection: closed 表明服务器关闭tcp 连接;
3)keep-alive:与 connection 相对应的是 keep-alive,其属性有 timeout=30 和 max=5 分别是 两次 http 请求 保持的时间,max表示这个tcp 连接最多被几个 http 请求重用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一套阿里高级Java面试题,要去阿里的先过这些题。

转载自 分享一套阿里高级Java面试题,要去阿里的先过这些题。

从零开始学spring-boot(2)-集成spring-data-jpa

http://blog.csdn.net/u013257425/article/details/52970820

基于openfire源码开发插件

【0】README1)本文旨在 简述如何 基于openfire源码开发插件, 如何导入 openfire源码到 eclipse,参见 http://blog.csdn.net/pacosonswjtu/article/details/518716222)also , you can checkout source code of the plugin from h…

分享18道Java基础面试笔试题

转载自 分享18道Java基础面试笔试题(面试实拍) 1.你最常上的两个技术站和最常使用的两个app分別进什么?主要解决你什么需求? 2.请简述http协议中get请求和post请求的区别. 3.请简述session和cookie的区別. 4.简述Servlet与JSP的关…

xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session

【1】org.xmpp.packet.Packet(数据包):1)intro: 一个 XMPP数据包(也被称为 数据节)。每个数据包由 dom4j 元素来支持。有一系列易于操作元素(Element)的便捷方法&#xf…

Dubbo面试题锦集

转载自 Dubbo面试题锦集1、默认使用的是什么通信框架,还有别的选择吗?2、服务调用是阻塞的吗?3、一般使用什么注册中心?还有别的选择吗?4、默认使用什么序列化框架,你知道的还有哪些?5、服务提供者能实现失…

spring-boot--整合thymeleaf模板

http://blog.csdn.net/li396864285/article/details/53811527

Zookeeper面试题锦集

转载自 Zookeeper面试题锦集1、zookeeper是什么框架?2、有哪些应用场景?3、使用什么协议?4、说说分布式一致性算法Paxos5、说一说选举算法及流程6、zookeeper有哪几种节点类型?7、zookeeper对节点的watch监听通知是永久的吗&#…

ReviewForJob(1)数据结构与算法分析引论

【1】 数学基础1.1)本书将使用以下4个定义: 对上述定义的分析(Analysis): - A1)第一个定义是说T(N)的增长率小于等于f(N)的增长率;- A2&#x…

Spring MVC+layui(基于bootstrap)+t 新增功能(页面和数据传递)

为开发的规范&#xff0c;更易于扩充&#xff0c;将新增与列表页分开为:list.html、add.html list.html:<!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"> <head> <meta charset"utf-8"></meta> <meta name&…

2017派卧底去阿里、京东、美团、滴滴带回来的面试题

转载自 2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案一&#xff0c;阿里巴巴面试题二&#xff0c;京东面试题三&#xff0c;美团面试题四&#xff0c;滴滴面试题五&#xff0c;本次卧底面试得到的结论通过面试题来看&#xff0c;可以看出目前互联网公司面试考点为&…

ReviewForJob(2)算法分析

【0】README1)本文旨在review 算法分析的几个算法问题 附带源码&#xff1b;【1】最大子序列和问题的解&#xff08;两种解法——分治法联机算法&#xff08;推荐&#xff09;&#xff09;【1.1】分治法1&#xff09;intro&#xff1a;其思想是把问题分成两个大致相等的子问题&…

java并行程序基础

1 进程 1 进程和线程之间的关系&#xff1a;进程是线程的容器。2 线程 1 线程的执行流程&#xff1a; **线程调用start(&#xff09;**方法时&#xff0c;表示线程开始执行&#xff1b;当线程执行时&#xff0c;处于RUNNABLE状态&#xff0c;表示线程所需的一切资源都准备好了…

ReviewForJob(3)表、栈和队列

【0】表ADT1&#xff09;intro&#xff1a;我们把 形如 A1, A2, A3, ..., An 的结构称为表&#xff1b;2&#xff09;表的实现&#xff1a; 数组&#xff08;循环数组&#xff09; 或 链表 或 双链表 或 循环链表实现&#xff1b;3&#xff09;表的插入&#xff0c;删除操作可以…

2017一季度JAVA面试题锦集

转载自 2017一季度JAVA面试题锦集 1、如何实现分布式事务&#xff0c;你们公司是怎么解决的&#xff1f; 2、HashMap数据结构及实现原理&#xff0c;其链表是用来解决什么问题的 3、可以自定义java.lang.String类吗&#xff0c;说明为什么 4、redis 1&#xff09;有哪几种类型的…

JDK并发包

JDK提供了大量实用的API和框架&#xff0c;来支持JDK内部功能&#xff1a; 介绍更多多线程控制方法&#xff0c;比如之前的synchronized&#xff1b;介绍JDK中对线程池的支持&#xff0c;提高线程调度性能&#xff1b;向大家介绍JDK的一些并发容器。 1 多线程的团队协作&…

ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列

【0】README 0&#xff09;希尔排序是基于插入排序的。将插入排序算法 内for循环中的所有 1 改为增量就可以。。bingo。。 插入排序源码 1&#xff09;本文旨在给出 希尔排序&#xff08;缩小增量排序&#xff09;之塞奇威克增量序列 的源码实现&#xff1b; 2&#xff09;为…

稍微有点难度的10道java面试题,你会几道?

转载自 稍微有点难度的10道java面试题&#xff0c;你会几道&#xff1f; 1、jvm对频繁调用的方法做了哪些优化&#xff1f; 2、常见的攻击手段有哪些&#xff1f;如何防范&#xff1f; 3、restful api有哪些设计原则&#xff1f; 4、hessian是做什么用的&#xff1f;它的…

重新学习Spring一--Spring在web项目中的启动过程

1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系&#xff0c;实现高内聚、低耦合。&#xff08;高内聚&#xff1a;相关性很强的代码组成&#xff0c;既单一责任原则&#xff1b;低耦合&#xff1a;耦合指块间联系&…