WebSocket原理与实践(一)---基本原理
WebSocket原理与实践(一)---基本原理
一:为什么要使用WebSocket?
1. 了解现有的HTTP的架构模式:
Http是客户端/服务器模式中请求-响应所用的协议,在这种模式中,客户端(一般是web浏览器)向服务器提交HTTP请求,服务器响应请求的资源
(例如HTML页面)和关于页面的附加信息。
1-1. HTTP的特点是:
HTTP是半双工协议,也就是说,在同一时刻流量只能单向流动,客户端向服务器发送请求(单向的),然后服务器响应请求(单向的)。服务器不能主动推送数据给浏览器。
当初这么设计也是有原因的,假如服务器能主动推送数据给浏览器的话,那么浏览器很容易受到攻击,比如一些广告商会主动把一些广告信息强行的传输给客户端。
半双工的缺点是:效率非常低下。
比如想实现股票的实时行情,火车票的剩余票数等这些,半双工协议是无法做到的。
2. 了解HTTP轮询,长轮询和流化。
一般情况下,浏览器访问网页时,会向页面所在的服务器发送一个HTTP请求,Web服务器确认请求并向浏览器返回响应。但是像股价,实时新闻等到达浏览器
显示页面时已经过时了,如果用户想要得到最新的实时信息,他们就要不断的刷新页面,这种显然是不切实际的。
轮询: 轮询是通过浏览器定时的向web服务器发送http的Get请求,服务器收到请求后,就把最新的数据发回给客户端,客户端得到数据后,将其显示出来,然后再定期的重复这一过程,虽然可以满足需求,但是存在一些缺点,比如某一段时间内web服务器没有更新的数据,但是浏览器仍然需要定时的发送Get请求过来询问,那么即浪费了带宽,又浪费了cpu的利用率。
如下图:
长轮询: 客户端向服务器请求信息,并在设定的时间段内打开一个连接,服务器如果没有任何信息,会保持请求打开,直到有客户端可用的信息,或者直到
指定的超时时间用完为止。这个时候,客户端会重新向服务器请求信息。长轮询也可以叫做Comet或反向ajax。它会延长HTTP响应的完成,直到服务器有
需要发送给客户端的内容,这种技术通常可以叫 "挂起GET" 或 "搁置POST".
缺点是:
当信息量非常大的时候,长轮询相对于http轮询并没有明显的性能优势,因为客户端必须频繁地重连到服务器以读取新信息。造成网络的表现和常规轮询相同。
如下图:
流化: 在流化技术中,客户端发送一个请求,服务器发送并维护一个持续更新和保持打开的开放响应。每当服务器有需要交付给客户端信息时,它就更新响应
。但是服务器从不发出完成HTTP响应的请求,从而使链接一直保持打开。在这种情况下,代理和防火墙可能缓存响应,导致信息交付的延迟增加。
因此许多流化对于存在防火墙和代理的网络是不友好的。
3. 了解WebSocket
WebSocket是一种全双工,双向,单套接字连接,使用websocket,http请求变成打开websocket的链接的单一请求,并且重用从客户端到服务器以及
服务器到客户端的同一连接。
WebSocket减少了延迟,因为一旦建立起Websocket连接,服务器可以在消息可用时发送他们。和轮询不同的是:WebSocket只发出一个请求,服务器
不需要等待来自客户端的请求,且客户端可以在任何时候向服务器端发送消息,和轮询相比的话,不管是否有可用消息,每隔一段时间都发送一个请求,
单一请求大大减少了延迟。
优点有如下:
1. WebSocket使实时通信更加有效。能节约带宽,CPU资源并减少延迟。
2. WebSocket使Web上客户端和服务器之间的通信变得更加的简单。
3. Websocket是一个底层网络协议,我们可以在它的基础之上构建其他的标准协议。
WebSocket的应用场景?
比如聊天,大型多人在线游戏,股票交易应用或实时新闻等。
二:了解WebSocket的相关API
见如下文章: http://www.cnblogs.com/tugenhua0707/p/8395669.html
WebSocket原理与实践(一)---基本原理的更多相关文章
- WebSocket原理与实践(四)--生成数据帧
WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...
- WebSocket原理与实践(三)--解析数据帧
WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义: 在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...
- WebSocket原理与实践
开题思考:如何实现客户端及时获取服务端数据? Polling 指客户端每隔一段时间(周期性)请求服务端获取数据,可能有更新数据返回,也可能什么都没有,它并不在乎服务端数据有无更新.(Web端一般采用a ...
- 2018-2019-2 20165235《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 20165235<网络对抗技术>Exp2 后门原理与实践 实验内容 1.使用netcat获取主机操作Shell,cron启动 2.使用socat获取主机操作Shel ...
- 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践
2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主 ...
- 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 20165315<网络对抗技术>Exp2 后门原理与实践 一.实验任务 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...
- 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践 后门的基本概念及基础问题回答 常用后门工具 netcat Win获得Linux Shell Linux获得Win Sh ...
- 2017-2018-2 20155303『网络对抗技术』Exp2:后门原理与实践
2017-2018-2 『网络对抗技术』Exp2:后门原理与实践 --------CONTENTS-------- 1. 后门原理与实践实验说明 2. 常用后门工具 NC或netcat Win获得Li ...
随机推荐
- 第一篇 Spring boot 配置文件笔记
spring boot 不需要配置太多文件程序便可正常运行,特殊情况需要我们自己配置文件. 项目以IDEA写实例,系统会默认在src/main/java/resources目录下创建applicati ...
- blfs(systemd版本)学习笔记-配置远程访问和管理lfs系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/ren ...
- window的cmd命令行下新增/删除文件夹及文件
新增文件夹 (md / mkdir) md <folderName>: folderName 就是文件路径,只输入文件夹名称时表示在当前目录下创建文件夹. 比如:md F:\test\pr ...
- CentOS 7.4下使用yum安装MySQL5.7.20 最简单的
CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默认好像是没有mysql的. 上一篇安装的是5.6的但是我想安装5.7的 yum安装是最简单 ...
- 消除2个按钮之间1px细节引起的冲突
1.代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF- ...
- Html/Css 初步认识笔记
1.什么是 HTML ? HTML(HyperText Markup Language) 的学名是超文本标记语言. 标记用来表示网页内容要如何显示,自身不显示 .<我就是标记> 标记成对出 ...
- 怎么查找Jenkins的个人api token
程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个 ...
- maven(四):一个基本maven项目的pom.xml配置
继续之前创建的test项目,一个基本项目的pom.xml文件,通常至少有三个部分 第一部分,项目坐标,信息描述等 <modelVersion>4.0.0</modelVersion& ...
- python第五十二天---第九周作业 类 Fabric 主机管理程序
类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载)4. 充分使用多线程或多进程5. 不同 ...
- Oracle SQL: DDL DML DCL TCL
Data Definition Language 自带commit,与表结构有关(数据字典)(会等待对象锁) Data Manipulation Language (数据文件相关变化有关,会产生锁)不 ...