由轮询到WebSocket

1 轮询

客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。客户端会轮询,有没有新消息。这种方式连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率。

2 长轮询

长轮询是对轮询的改进版,客户端发送HTTP给服务器之后,有没有新消息,如果没有新消息,就一直等待。当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。但是这种方式还是有一种弊端:例如假设服务器端的数据更新速度很快,服务器在传送一个数据包给客户端后必须等待客户端的下一个Get请求到来,才能传递第二个更新的数据包给客户端,那么这样的话,客户端显示实时数据最快的时间为2×RTT(往返时间),而且如果在网络拥塞的情况下,这个时间用户是不能接受的,比如在股市的的报价上。另外,由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费。

3  WebSocket

现在急需的需求是能支持客户端和服务器端的双向通信,而且协议的头部又没有HTTP的Header那么大,于是,Websocket就诞生了!流量消耗方面,相同的每秒客户端轮询的次数,当次数高达数万每秒的高频率次数的时候,WebSocket消耗流量仅为轮询的几百分之一

WebSocket协议原理

Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

1 大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。

2 和http的chunk一样,可以边生成数据边传递消息,即提高传输效率。

WebSocket和Socket的区别与联系

首先,Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。

Socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket,一个Socket由一个IP地址和一个端口号唯一确定。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

Socket在通讯过程中,服务端监听某个端口是否有连接请求,客户端向服务端发送连接请求,服务端收到连接请求向客户端发出接收消息,这样一个连接就建立起来了。客户端和服务端也都可以相互发送消息与对方进行通讯,直到双方连接断开

WebSocket的使用场景

1.社交聊天

最著名的就是微信,QQ,这一类社交聊天的app。这一类聊天app的特点是低延迟,高即时。即时是这里面要求最高的,如果有一个紧急的事情,通过IM软件通知你,假设网络环境良好的情况下,这条message还无法立即送达到你的客户端上,紧急的事情都结束了,你才收到消息,那么这个软件肯定是失败的。

WebSocket原理及使用场景2.弹幕

说到这里,大家一定里面想到了A站和B站了。确实,他们的弹幕一直是一种特色。而且弹幕对于一个视频来说,很可能弹幕才是精华。发弹幕需要实时显示,也需要和聊天一样,需要即时。

3.多玩家游戏

4.协同编辑

现在很多开源项目都是分散在世界各地的开发者一起协同开发,此时就会用到版本控制系统,比如Git,SVN去合并冲突。但是如果有一份文档,支持多人实时在线协同编辑,那么此时就会用到比如WebSocket了,它可以保证各个编辑者都在编辑同一个文档,此时不需要用到Git,SVN这些版本控制,因为在协同编辑界面就会实时看到对方编辑了什么,谁在修改哪些段落和文字。

5.股票基金实时报价

金融界瞬息万变——几乎是每毫秒都在变化。如果采用的网络架构无法满足实时性,那么就会给客户带来巨大的损失。几毫秒钱股票开始大跌,几秒以后才刷新数据,一秒钟的时间内,很可能用户就已经损失巨大财产了。

6.体育实况更新

全世界的球迷,体育爱好者特别多,当然大家在关心自己喜欢的体育活动的时候,比赛实时的赛况是他们最最关心的事情。这类新闻中最好的体验就是利用Websocket达到实时的更新!

7.视频会议/聊天

视频会议并不能代替和真人相见,但是他能让分布在全球天涯海角的人聚在电脑前一起开会。既能节省大家聚在一起路上花费的时间,讨论聚会地点的纠结,还能随时随地,只要有网络就可以开会。

8.基于位置的应用

越来越多的开发者借用移动设备的GPS功能来实现他们基于位置的网络应用。如果你一直记录用户的位置(比如运行应用来记录运动轨迹),你可以收集到更加细致化的数据。

9.在线教育

在线教育近几年也发展迅速。优点很多,免去了场地的限制,能让名师的资源合理的分配给全国各地想要学习知识的同学手上,Websocket是个不错的选择,可以视频聊天、即时聊天以及其与别人合作一起在网上讨论问题…

10.智能家居

这也是我一毕业加入的一个伟大的物联网智能家居的公司。考虑到家里的智能设备的状态必须需要实时的展现在手机app客户端上,毫无疑问选择了Websocket。

11.总结

从上面我列举的这些场景来看,一个共同点就是,高实时性!

WebSocket原理及使用场景(转载)相关推荐

  1. WebSocket 原理

    WebSocket 原理 转载自个人博客,转载请声明,走啊走的记录:WebSocket 原理 背景 以前的网站为了实现推送功能,使用的方法都是轮询.所谓的轮询就是在特定的时间间隔(例如1秒),由浏览器 ...

  2. Websocket——原理及基本属性和方法

    Websocket--原理及基本属性和方法 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP ...

  3. 微信团队分享:视频图像的超分辨率技术原理和应用场景

    为什么80%的码农都做不了架构师?>>>    本文来自微信多媒体团队高欣玮的技术分享. 1.前言 图像和视频通常包含着大量的视觉信息,且视觉信息本身具有直观高效的描述能力,所以随着 ...

  4. 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen

    算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...

  5. oracle分库分表原理_02. MyCat 的原理,应用场景,分库分表的思想

    # MyCAT 作用是能够代替昂贵的oracle的MySQL集群中间件. 1) 一个彻底开源的,面向企业应用开发的"大数据库集群" 2) 支持事务.ACID.可以替代Mysql的加 ...

  6. 同一事务多次加for_谈谈事务隔离级别,以及悲观锁和乐观锁的原理和应用场景...

    前言 在日常开发中,数据库我想大家一点都不陌生是吧,我想不管你写啥,数据库就算没用过你也听说过吧.做好数据方面的操作,不仅仅需要对Java相关框架的掌握,还需要对数据库自身体系结构的理解. 本文是补充 ...

  7. CF、FM、DSSM、DeepFM等这些推荐模型的原理以及使用场景是什么?

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,尤其是推荐系统.计算广告等领域.由于推荐系统与提升用户量以及商业化变现有着密不可分的联系,各大公司都放出了众多 ...

  8. Django基础(33): 中间件(middleware)的工作原理和应用场景举例

    在初级Django开发项目中,你大概率用不到中间件(Middleware).但随着项目需求越来越复杂,你就需要开始编写自己的中间件了.当你了解到Django中间件(middleware)的工作原理和作 ...

  9. mysql 消极锁_MySQL支持的事物隔离级别以及消极锁和乐观锁原理和应用场景

    在一样平常开发中,尤其是营业开发,少不了行使 Java 对数据库举行基本的增删改查等数据操作,这也是Java工程师的必备手艺之一.做好数据操作,不仅仅需要对Java语言相关框架的掌握,更需要对种种数据 ...

最新文章

  1. python并发编程方法_Python Futures并发编程详解
  2. 用python读取、处理、另存为csv文件
  3. Flex调用as文件中的类
  4. Python基础教程:pd.drop_duplicates删除重复行的方法
  5. Windows消息:WM_USER与WM_APP的区别
  6. 回调函数之Java/C++版本
  7. 解决 Unable to load native-hadoop library for your platform方法之一
  8. ethtool---查看网卡
  9. thinkphp 3.2视图里添加URL参数 实例
  10. msxml3.dll error '80072efd' 错误的解决办法
  11. 电脑罗盘时钟html怎么设置成桌面,抖音网红款Word Clock罗盘时钟电脑桌面屏保设置教程-完整版...
  12. 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办
  13. 梁宁-产品思维30讲-机会判断-点线面体的战略选择
  14. ISO文件怎么安装?
  15. 《构建之法》学习总结2——软件工程需求分析
  16. 使用高德SDK开发安卓地图应用软件
  17. 解决奔腾处理器在tensorflow高版本下报动态链接库(DLL)初始化例程失败
  18. 基本流程图的制作-通过在线制图工具绘制
  19. 系统权限设计 - 基本概念和思路
  20. (转)对 Linux 专家非常有用的 20 个命令

热门文章

  1. 了解一下C++输入和输出的概念
  2. Sql server profiler抓出的语句不可信
  3. 排错-tcpreplay回放错误:send() [218] Message too long (errno = 90)
  4. linq to sql 多条件组合查询
  5. kaios好用吗_印度 KaiOS操作系统有可能会成为世界第三大操作系统?
  6. Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记
  7. linux 字符串加入中括号,Shell 中的中括号用法总结
  8. oracle 三个口令管理,Oracle学习笔记(12)口令和资源管理
  9. hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
  10. java获取数据库数据保存到本地txt文件中