websocket简介
在我们做web项目的过程中,经常需要做的一个模块是消息模块。典型的场景:一个商城系统的后台管理,我想实现如果前台有客户下单,后台就会接到消息,以便尽快发货处理。
要实现上述的功能,我们有几种备选的方案。
方案1.使用ajax短轮询,比如每隔1分钟去请求一次服务器,让服务器去数据库去查询,看看有无新的未处理的订单,然后返回给客户端。
方案2.长轮询,长轮询的原理与上述类似,只不过采取了阻塞响应(response)的方法,也就是说只要服务器没有响应,这个请求就不断开,一直等到服务器有响应为止。
ajax短轮询好比客户端每隔一段时间打一个电话给服务器,服务器不管有没有数据都要响应给客户端,响应完以后就挂掉电话,然后周而复始;
长轮询则是客户端打一个电话,开始一直等,直到服务器有响应,如果服务器一直不响应,这个请求就一直挂在那边。
很显然,这两种方案都有各自弊端。
方案1:每隔一定时间去轮询服务器,这个时间的设置很关键,太长了,即时性得不到保证,太短了,有可能会造成服务器性能的浪费(主要是cpu),假设在一个小时之内都没有一个订单,但是客户端还是不间断的每分钟发一次请求,这些请求就是浪费。
方案2:方案2的出现本来是为了解决方案1这种盲目不确定地发送请求造成浪费的弊端,但是它自己同样也有弊端,首先,它采取阻塞的方式来强迫连接长时间保持,而对于服务器而言,在同一个时间里面能处理的连接数(我们称之为程序的并发数)是有限的,而长轮询方式很容易造成服务端达到并发的限制,因为它不像短轮询一样会很快释放掉连接。
它们的共同的缺点是,每一次请求和响应,处理处理真正有用的数据,服务器和客户端还要交换一堆请求头,响应头等东西,信息交换的效率不高。事实上可以说,长轮询是一种伪长连接,它还是需要遵循http连接的规则:客户端请求--服务器响应--释放连接,顺便交换了一些相同的无用的信息。(造成带宽浪费)
websocket的原理网上有很多人也介绍了,简单来说,它就是html5中的一种协议,我的理解是,他是对html的长连接的一种升级。你也可以将它理解成一种长连接。只不过这种长连接相对于方案2的长轮询有以下优越之处。
1.首先,websocket连接只需要建立一次,在第一次连接的时候,客户端和服务器会交换必要的信息,如下所示。

可以看到,websocket连接成功后返回的状态码是101.在请求头处,传递过来的connection类型是keep_alive,upgrade。也就是说是keep_alive的升级版。首先keep_alive是属于http1.1协议的范畴。大概的意思就是,在http1.0时代,我建立一个连接就是对应一次request--response的过程。而在1.1时代,新增加了keep-alive,我们可以保持这个连接的生命周期(可以通过nginx等服务器设置keepalive-timeout这个参数来实现),这样做的好处是可以自定义一个连接的存活时间,使得一个连接可以处理多个请求,而不是单单一次请求。设置了keepalive-timeout以后,当一个请求结束以后,我们在等keepalive-timeout这么长的时间,如果没有新的请求,就关闭这个连接。
说到http1.1,我们来看一个http的连接的请求头和响应头。

看到了吧,不一样的地方就在于那个upgrade。所以我们可以这么说,websocket也是一个长连接。但是因为它是升级版,所以它有个好处,就是它只需要建立一次连接,传递一次必要的请求头和响应头信息,之后再传递数据的时候就不需要在交换这些信息了。节省了带宽。
2.websocket是双向的,这也是他跟另外两种方法最大的不同,不管是ajax还是长轮询,他们都是通过客户端发送请求,服务器响应的形式完成信息的交换,这种模式下服务器处于一种被动的角色。而websocket不存在这个问题,websocket的链接一旦建立,服务器和客户端都可以互推信息。
有了这两个优点,在做一些需要即时通信的功能时候,我们首选就是用websocket。
websocket简介的更多相关文章
- WebSocket消息推送(实现进行聊天)和WebSocket简介
WebSocket简介 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信.特点:事件驱动异步使用ws或者 ...
- 【HTML5】HTML5 WebSocket简介以及简单示例
互联网发展到现在,早已超越了原始的初衷,人类从来没有像现在这样依赖过他:也正是这种依赖,促进了互联网技术的飞速发展.而终端设备的创新与发展,更加速了互联网的进化: HTTP/1.1规范发布于1999年 ...
- WebSocket 简介
在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术.这个新的API提供了一个方法 ...
- Windows Azure 网站上的 WebSocket 简介
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站最近新增了对 WebSocket 协议的支持..NE ...
- websocket ----简介,以及demo
#导报 from dwebsocket.decorators import accept_websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户 ...
- websocket之一:websocket简介
Websocket websocket为一次HTTP握手后,后续通讯为tcp协议的通讯方式. WebSocket 使用一种被称作“Upgrade handshake(升级握手)”的机制将标准的 HTT ...
- 1.轮询、长轮询、websocket简介
一.轮询 前端每隔固定时间向后台发送一次请求,询问服务器是否有新数据 缺点: 延迟,需要固定的轮询时间,不一定是实时数据 大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候 并没有新的数 ...
- WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
随机推荐
- elastic-search单机部署以及中文分词IKAnalyzer安装
前提条件 elasticsearch使用版本5.6.3,需要jdk版本1.8,低于该版本不能使用 下载 https://artifacts.elastic.co/downloads/elasticse ...
- javaScript函数提升及作用域
代码片段: var a = 1; function foo() { console.log(a); //输出为undefined if (!a) { var a = 2; } alert(a); }; ...
- [转载] Hive与HBase的联系与区别
转载自http://blog.csdn.net/wangmuming/article/details/23954527和http://www.cnblogs.com/justinzhang/p/427 ...
- http2.4简单配置
前言: 上一篇博文说到了http的发展以及http完整请求响应的工作流程. 一.开篇: 从最简单的静态服务器开始. 之前说过,http是应用层协议,必定会在用户空间体现出具体的应用程序.常见的http ...
- [DFS遍历图]UVA10562 Undraw the Trees
传送门: 1. UVA - 10562 2. Vjudge [看图写树] 将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...
- lua table操作实例详解
lua_gettable lua_getglobal(L, "mytable") <== push mytable lua_pushnumber(L, 1) & ...
- 【原创】抓个Firefox的小辫子,围观群众有:Chrome、Edge、IE8-11
前言 很多人都知道我们在做FineUI控件库,在这 9 年多的时间里,在和浏览器无数次的交往中,也发现了多个浏览器自身的BUG,并公开出来方便大家查阅: 分享IE7一个神奇的BUG(不是封闭标签的问题 ...
- python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
一.项目目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式 二.确定页面内容 爬虫地址:https://movie.douban.co ...
- 安装vue-cli时出现的错误,cmd 卡住
今天在构建vue 时遇到个问题, cmd 执行 vue init webpack my-project 时 , 出现如下乱码, 然后 页面 卡住在 项目说明 ,操作不了, 最后发现是 nodejs 版 ...
- PAT 1008. Elevator (20)
1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest ...