Bosh vs Comet vs Long Polling vs Polling
最近在研究在中国特色移动互联网下通过性最好的应用层协议办法,看到很多混乱的概念和实现,54chen在对各种名词的历史进行了深度考察,特作记录以做区分。
HTTP协议历史
第一个HTTP协议诞生于1989年3月。
第一个HTTP协议的版本是HTTP 0.9,它的组成极其简单,因为它只允许客户端发送GET这一种请求。
HTTP协议的第二个版本是HTTP 1.0,直到HTTP 1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应,同样是建立并关闭一次连接。
HTTP协议的第三个版本是HTTP 1.1,它就是目前使用最广泛的协议版本。从HTTP 1.1开始,客户端默认与Web 服务器建立长连接。
原始阶段polling
最早期的时候,因为没有可以依赖的东西,能用的只有javascript的setInterval,定时循环向服务器发起请求。
优点是:服务器端啥特别的东西都不用准备,直接当http请求处理即可。缺点是:白白浪费大量的请求。
什么是Comet?
中文意思彗星,大概是想表示这是一次尾巴会拖很长的请求。
Comet和ajax一样,都是一堆技术的合体叫做Comet(莫非是javascript界很喜欢搞高大上的名词?)。
初始阶段的Comet
CometP属于这种(jsonP+iframe)。
Frame Comet也属于这种(json+iframe)。
ajax Comet也属于这种(ajax)
HTTP1.1是长连接,而且服务器chunked encoding机制可以让结果部分输出。
利用HTTP1.1的特性,再配合iframe src到一个url,一旦有数据,通过javascript的top.func()把数据告诉浏览器。
优点是:比起polling节省了更多的带宽。缺点:用户打开多个浏览器时会占用多条连接,所以必须在server端配合使用非阻塞的http server,同时如果网络不太稳定,容易断掉。
改良版的Comet:long polling
因为发现网络不稳定容易断的问题。
改良后,添加了每次请求返回后立即重新发起请求机会--长轮循。
优点:比起初始阶段,不容易因网络断了连接,是当今最常见的解决方案。缺点:实在找不到啥缺点,唯一的缺点就是利用了http协议,要是tcp层的,直接连接上收发数据就行了。
双向可通的WebSocket
前面都是说的http的,html5就来了个WebSocket,WEB也可以进行TCP连接了。
各浏览器实现略有不同。
优点:底层连接 缺点:好多浏览器不支持。
BOSH(Bidirectional-streams Over Synchronous HTTP)
这是xmpp协议里定义的一个扩展协议,实际上也可以归结为Comet技术的合体。
它同时支持老的polling也支持long polling。
具体实现中要完成交互协议才行。
优点:若实现细节可自动适应http 1.0 1.1 缺点:实现要更复杂。
结尾
各种让人混淆的名词,其实都是在做同一件事情。
http streaming = http chunked encoding = http keepalive = http 1.1
转载于:https://my.oschina.net/vdroid/blog/311962
Bosh vs Comet vs Long Polling vs Polling相关推荐
- PHP服务端推送技术Long Polling
perfgeeks linux . bash . php . python . c PHP服务端推送技术Long Polling Long Polling与Polling概述 服务端推送技术应用越来越 ...
- NetScaler的Web 2.0 Push技术
一.前言 通常情况下,异步通知通过使用HTTP和服务器推送技术,如轮训,长轮询和HTTP流,这使得服务器能够将通知推送到浏览器.这些技术需要服务器保持大量的TCP/IP连接,由于其每次连接的时间较短, ...
- WEB消息提醒实现之二 实现方式-基于Iframe的流方式
#基于Iframe的流方式 ##原理 基于Iframe的流方式的原理主要是,在页面隐藏一个iframe,前台设定定时器修改iframe的src属性设为对一个长连接的请求,服务器返回对页面函数的调用,函 ...
- 基于dwr2.0的Push推送技术详细解析以及实例
DWR从2.0开始增加了push功能,也就是在异步传输的情况下可以从Web-Server端发送数据到 Browser. 我们知道,Web的访问机制天生是设计用来pull数据的,也就是只允许Browse ...
- 基于dwr2.0的Push推送技术详细解析以及实例(转)
DWR从2.0开始增加了push功能,也就是在异步传输的情况下可以从Web-Server端发送数据到 Browser. 我们知道,Web的访问机制天生是设计用来pull数据的,也就是只允许Browse ...
- Quora’s Technology Examined
转载自:http://www.philwhln.com/quoras-technology-examined/comment-page-1#comment-1691 Quora has taken t ...
- 每天接触大量论文,看看他们是怎样写笔记的 | PaperDaily #09
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...
- 基于Server-Sent Event的简单在线聊天室
一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览 ...
- springmvc(18)使用WebSocket 和 STOMP 实现消息功能
[0]README 1)本文旨在 介绍如何 利用 WebSocket 和 STOMP 实现消息功能: 2)要知道, WebSocket 是发送和接收消息的 底层API,而SockJS 是在 WebSo ...
最新文章
- Code Review 是一场苦涩但有意思的修行
- linux7安装pgsql数据库,在CentOS7系统上安装和配置PostgreSQL
- makefile多目录多文件
- ugui unity 图片缩放循环_Unity基础系列(四)——构造分形(递归的实现细节)...
- java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式
- [开源]jquery.ellipsis根据宽度(不是字数)进行内容截断,支持多行内容
- java方法重载和重载方法_Java 8的方法参考进一步限制了重载
- SI,PI,EMC/EMI和RF-电路设计名词讲解
- 提交App中断出现 Cannot proceed with delivery an existing transporter instan
- Linux调试智能卡环境搭建(二),其中包含Linux编译链接动态库相关
- android屏幕重力感应器,android屏幕重力感应如何实现,很质量的一个问题
- ADS1256 24位ADC模块
- Vue3 理解 toRef 和 toRefs 的作用、用法、区别
- 南天收藏库为什么大不了_参加技术会议:有什么大不了的?
- MySQL中如何设置外键
- 【名企面试经验-快手-校招提前批】【Java研发工程师】
- LVM-HOWTO/学习笔记(五)
- 解决在ubuntu的firefox浏览器下不能看b站视频的问题
- CentOS 安装 php 运行环境
- QTreeWidget 勾选三种状态
热门文章
- Debian/Ubuntu Apache Mod_Rewrite 安装
- PetShop之ASP.NET缓存 --one
- html div 右侧,span在div里居左和居右布局
- ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...
- java 动态报表 sql,报表SQL
- android 图片存储读取数据库中,如何在android中存储(位图图像​​)并从sqlite数据库中检索图像?...
- html input type=quot;filequot;,input[type='file']默认样式
- Spring RestController
- java编程测试题_Java编程测试可帮助您评估求职者
- wordpress编辑插件_如何使用Tabify编辑屏幕插件减少WordPress帖子编辑器屏幕的拥挤