websocket个人理解总结
WebSocket
- 释义:聊天室、服务、套接字、协议
引用:https://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.html
作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意。WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道。Web 开发人员可以非常方便地使用websocket构建实时web应用,开发人员的手中从此又多了一柄神兵利器。
- webSocket协议是一个持久化协议,相对http这种非持久的协议来说。
简单说:http1.0中,一个request对应一个response,当次访问结束
http1.1中,多个request对应多个response,采用keep-alive;
总归:一个req只能对应一个res,并且这个res不能主动发送给客户端,它是被动的。嗯,很被动。并且,http是无状态协议,一旦请求结束,它就会把关于请求的一切都给忘了,然后等你下次再请求的时候,还得重新认识它一下,重新发送请求,它再重新给你计算一次结果并返回给你。 实时web 应用
普通web请求通讯过程

1.问题:比如说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了。
2.[以前的解决方案][3]
1)ajax轮询:前端设置一个定时器,每隔一段时间,给服务器发送一个请求,然后服务器给你返回,不停的问,服务器不停的回,最后的结果,服务器弱点的话,就是崩了!
2)long poll (长轮询):这个也是同一个机制,不过采取的是阻塞模型。客户端到服务器家借钱,服务器没有钱,说是去打工挣钱了,等挣到钱就给他,但是客户端不走,等到服务器把钱拿回来了再走,或者客户端等的时间太长了,已经超过它设定的等待时间,它就会结束这次借钱任务,然后过些时候,再过来看看,服务器是不是已经有钱了。如果说是,客户端不停的和服务器要钱,来一趟,拿走,再来一趟,拿走,那么这种方法和ajax轮询没有区别。术语:当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态改变或者时间过期,通过这种机制来减少无效的客户端和服务器间的交互简单的总结:(若错误请指出)
1.性能高:为什么性能高呢,因为客户端只要一次请求,连接上了,就不再请求,等待服务器主动给客户端数据:[情景如下][3]:
客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)
服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)
客户端:麻烦你有信息的时候推送给我噢。。
服务端:ok,有的时候会告诉你的。
服务端:有更新啦
服务端:又有更新啦
服务端:哈哈哈哈哈啊哈哈哈哈
服务端:笑死我了哈哈哈哈哈哈哈
那么为什么他会解决服务器上消耗资源的问题呢?其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(PHP等)来处理。简单地说,我们有一个非常快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。,导致客服不够。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。这样就可以解决客服处理速度过慢的问题了
[3]:https://www.zhihu.com/question/20215561
2.双向:服务器也能主动发送数据给客户端了,不再是客户端踹一脚应一声的状态
3.兼容性:能兼容到ie10+,chrome4+,firefox4+,opera10+,Safari5+
4.能跨域(socket.io)
socket.io
- 释义:[Socket.IO 是一个用来实现实时双向通信的框架,其本质是基于 WebSocket 技术。Socket.IO 与 ws 等其他基于 webSocket 通信的库相比,它的好处在于,当浏览器支持 WebSocket 技术时它能正常使用 WebSocket 来工作,当浏览器不支持 WebSocket 时,它能平稳退化成轮询进行工作][4]
[4]:http://www.cnblogs.com/ghost-xyx/p/7060070.html - Socket.IO 在[客户端][5]与[服务端][6]二者均有一套 API
[5]:https://socket.io/docs/client-api/
[6]:https://socket.io/docs/server-api/
websocket个人理解总结的更多相关文章
- WebSocket协议理解-数据包格式解析
WebSocket 的诞生 做客户端开发时,接触最多的应用层网络协议,就是 HTTP 协议,而今天介绍的 WebSocket,下层和 HTTP 一样也是基于 TCP 协议,这是一种轻量级网络通信协议, ...
- websocket的理解及实例应用
websocket协议是HTML5提出的一个新的规范,主要用于实现服务器及时推送信息给客户端的功能. websocket实现是基于HTTP协议的部分握手功能,但是websocket仅仅握手一次即可进行 ...
- WebSocket 的理解
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信. 它的最大特点就是,服务器可以主动向客户端推送信息,客 ...
- websocket简单理解
实现及原理 Websocket是一种在单个TCP连接上进行全双工通讯的协议. WebSocket 首先发起一个 HTTP 请求,在请求头加上 `Upgrade` 字段,该字段用于改变 HTTP 协议版 ...
- WebSocket的理解
Websocket相对于无状态的HTTp协议,是在一次成功连接之后,在关闭请求之前,服务器和客户端能顺利进行信息传输.而不用像HTTP那样每一次都要告诉服务器这个请求者是谁(身份鉴别信息). 在HTT ...
- Cowboy 开源 WebSocket 网络库
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...
- WebSocket的实现与应用
WebSocket的实现与应用 前言 说到websocket,就不得不提http协议的连接特点特点与交互模型. 首先,http协议的特点是无状态连接.即http的前一次连接与后一次连接是相互独立的. ...
- 深入理解 Web 协议 (三):HTTP 2
本篇将详细介绍 HTTP 2 协议的方方面面,知识点如下: HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘:HPACK 算法 HTTP 2 协议中 Server ...
- Node.js的学习路线
http://www.admin10000.com/document/4624.html 顺便关注一下博客:http://blog.fens.me/series-nodejs/ php socket框 ...
随机推荐
- 使用css3 制作switch开关
使用css3来实现switch开关的效果: html代码: <!--switch开关--><div class="switch-btn"> <inpu ...
- 2019/05/11 JAVA虚拟机原理堆、栈、方法区概念区别
Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...
- js的本质、全局属性
一.js的本质 1.js的本质就是处理数据, 数据来自于后台数据库, 所以变量就起到一个临时数据的作用 Ecmascript 制定了js的数据类型 2.数据类型有哪些? 字符串(string).数字( ...
- 【学习笔记】深入理解js闭包
本文转载: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
- HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
题意:有n种商品,每种商品中有a个糖果,如果买这种商品就送多b个糖果,只有第一次买的时候才送.现在有m元,最多能买多少糖果? 思路:第一次买一种商品时有送糖果,对这一次进行一次01背包,也就是只能买一 ...
- Zotero文献管理神器使用
为什么使用Zotero管理论文? 1.可以从网上剪藏 2.可以查询 3.有作者 标题 期刊 索引 4.word自动生成论文索引 把pdf文件导入Zotero 按住ctrl+shift拖动pdf文件,就 ...
- JAVA自定义栈
public class Stack{ int[] data; int maxSize; int top; public Stack(int maxSize) { this.maxSize=maxSi ...
- C程序(1)
- SQL Server连接不上本地服务器
昨天星期一,到公司,如常打开电脑后,上个厕所,吃个早餐,电脑才完全醒来.打开项目后台,发现登不上,用户名或密码错误,认真输入几遍,还是错误,打开本地数据库,sql server连接不上,提示错误: 我 ...
- 全局/局部变量、宏、const、static、extern
#pragma mark--全局变量和局部变量 根据变量的作用域,变量可以分为: 一.全局变量 1> 定义:在函数外面定义的变量2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后 ...