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原理与实践(一)---基本原理的更多相关文章

  1. WebSocket原理与实践(四)--生成数据帧

    WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...

  2. WebSocket原理与实践(三)--解析数据帧

    WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义:   在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...

  3. WebSocket原理与实践(二)---WebSocket协议

    WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...

  4. WebSocket原理与实践

    开题思考:如何实现客户端及时获取服务端数据? Polling 指客户端每隔一段时间(周期性)请求服务端获取数据,可能有更新数据返回,也可能什么都没有,它并不在乎服务端数据有无更新.(Web端一般采用a ...

  5. 2018-2019-2 20165235《网络对抗技术》Exp2 后门原理与实践

    2018-2019-2 20165235<网络对抗技术>Exp2 后门原理与实践 实验内容 1.使用netcat获取主机操作Shell,cron启动 2.使用socat获取主机操作Shel ...

  6. 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践

    2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主 ...

  7. 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践

    2018-2019-2 20165315<网络对抗技术>Exp2 后门原理与实践 一.实验任务 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...

  8. 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践 后门的基本概念及基础问题回答 常用后门工具 netcat Win获得Linux Shell Linux获得Win Sh ...

  9. 2017-2018-2 20155303『网络对抗技术』Exp2:后门原理与实践

    2017-2018-2 『网络对抗技术』Exp2:后门原理与实践 --------CONTENTS-------- 1. 后门原理与实践实验说明 2. 常用后门工具 NC或netcat Win获得Li ...

随机推荐

  1. Mongodb的基本语法

    前段时间工作上面由于没有多少事所以玩了玩mongodb,学习了它的基本语法,然后现在在这里做一个简单的总结. 1.我是在win平台上面,启动的话比较麻烦,所以我就简单的把启动过程做了个批处理文件 启动 ...

  2. cookie和session的区别和用法

    1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以 ...

  3. Python 中 and 和 or 的短路原则

    对于 and 来说: 如果第一个条件的结论为假,那么 and 前后两个条件组成的表达式计算结果一定为假,后面的条件计算机不会进行计算 对于 or 来说: 如果第一个条件的结论为真,那么 or 前后两个 ...

  4. Python 获取时间

    记录下 Python 下获取时间的方法 time 模块 import time time_format = '%Y-%m-%d %X' time_current = time.strftime(tim ...

  5. 2018-01-15 Antlr4: 修改语法规则更接近普通BNF格式

    经 @沈默 在上文Antlr4添加中文变量赋求值,括号,各种问题评论中指出, 语法规则描述依赖于Antlr4生成的语法分析器的默认分析方法, 比如运算符的左联系, 以及优先级处理等等. 于是将语法修改 ...

  6. Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试

    脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122   目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...

  7. 四则运算 Java 姚康友,黎扬乐

    github项目传送门:https://github.com/yaokangyou/arithmetic 项目要求 功能列表 [完成] 使用 -n 参数控制生成题目的个数 [完成] 使用 -r 参数控 ...

  8. Python实现排列组合

    # -*- coding: utf-8 -*-"""Created on Sat Jun 30 11:49:56 2018 @author: zhen"&quo ...

  9. maven(三):maven项目结构及其运行机制

    在上一篇中讲了如何创建maven项目,现在回到那个项目 项目结构 src/main/java:java代码目录 src/main/resources:资源目录,比如spring.xml文件,prope ...

  10. 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment

    闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...