浅谈HTML5 WebSocket的机制
回想上一章
在上一章《为什么我们须要HTML5 WebSocket》中,我简单的介绍了下WebSocket的前世今生。相信大家已对WebSocket有了初步的了解。那么今天我们继续深入学习WebSocket的机制。
WebSocket机制
我们知道WebSocket是HTML5一种新的协议。它实现了浏览器与server全双工通信(不知道的能够看下全双工通信RS-422标准),能更好的节省server资源和带宽并达到实时通讯,它建立在TCP之上。同HTTP一样通过TCP来数据传输,可是它和HTTP最大不同是:
WebSocket是一种双向通信协议,在建立连接后,WebSocketserver和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样;
WebSocket须要相似TCP的client和server端通过握手连接,连接成功后才干相互通信。
非WebSocket模式传统 HTTP client与server的交互例如以下:
传统 HTTP 请求响应clientserver交互图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
WebSocket 请求响应clientserver交互图
依据上面两张图对照能够看出。相对于传统的HTTP每次请求-应答都须要client与服务端建立连接的模式。WebSocket是相似Socket的TCP长连接的通讯模式,一旦WebSocket连接建立后,兴许数据都以帧序列的形式传输。
在client断开WebSocket连接或Server端断掉连接前。不须要client和服务端又一次发起连接请求。
在海量并发及client与server交互负载流量大的情况下。极大的节省了网络带宽资源的消耗,有明显的性能优势,且client发送和接受消息是在同一个持久连接上发起。实时性优势明显。
WebSocket和HTTP的报文
我们再来看看WebSocket通讯与传统HTTP的不同交互的报文:
在client(浏览器端js),创建WebSocket 实例化一个新的 WebSocket client对象,连接相似 ws://yourdomain:port/path 的服务端 WebSocket URL。WebSocket client对象会自己主动解析并识别为 WebSocket 请求,从而连接服务端端口,运行两方握手过程,client发送数据格式相似:
WebSocket client连接报文
能够看到,client发起的 WebSocket 连接报文相似传统 HTTP 报文,”Upgrade:websocket”參数值表明这是WebSocket类型请求。“Sec-WebSocket-Key”是WebSocketclient发送的一个base64编码的密文。要求服务端必须返回一个相应加密的“Sec-WebSocket-Accept”应答,否则client会抛出“Error during WebSocket handshake”错误,并关闭连接。
服务端收到报文后返回的数据格式相似:
WebSocket 服务端响应报文
“Sec-WebSocket-Accept”的值是服务端採用与client一致的密钥计算出来后返回client的,“HTTP/1.1 101 Switching Protocols”表示服务端接受WebSocket协议的client连接,经过这种请求-响应处理后。client服务端的WebSocket连接握手成功, 兴许就能够进行TCP通讯了。
欢迎大家关注我的博客。关注我的微博,如有疑问。请加qq群:454796847、135430763 共同进步!
浅谈HTML5 WebSocket的机制的更多相关文章
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈html5网页内嵌视频
更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...
- AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构
requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...
- 浅谈html5 video 移动端填坑记
这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...
- 浅谈Java的反射机制和作用
浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...
- 浅谈:Redis持久化机制(一)RDB篇
浅谈:Redis持久化机制(一)RDB篇 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...
- 浅谈:Redis持久化机制(二)AOF篇
浅谈:Redis持久化机制(二)AOF篇 上一篇我们提及到了redis的默认持久化方式RDB,是一种通过存储快照数据方式持久化的机制,它在宕机后会丢失掉最后一次更新RDB文件后的数据,这也是由于它 ...
- 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route
心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...
- 浅谈C语言中断处理机制
一.中断机制 1.实现中断响应和中断返回 当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急.更重要的工作,则在执行完当前指令后响应这一中断请求.CPU中断响应过程如下:首先, ...
随机推荐
- 关于RSA加密算法的工具类
关于RSA加密算法的工具类 最近在捣鼓SSO(单点登录),就是一个在应用(系统)登录之后,当切换其他应用(系统)的时候,可以省去登录,提高用户的使用的便捷.(具体有时间在写) 期间涉及的安全问题,发送 ...
- Axure JS弹窗提示部件
百度网盘:http://pan.baidu.com/s/1c1ZjUPq
- 转:TCP/IP协议栈的基本工作原理
转载自:http://jasonccie.blog.51cto.com/2143955/422966 TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议.就前面一段时间面试中问到的TCP/I ...
- git pull时冲突的几种解决方式
仅结合本人使用场景,方法可能不是最优的 1. 忽略本地修改,强制拉取远程到本地 主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉 git fetch --a ...
- 强力密码暴力破解工具:hydra
语法: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FIL ...
- 使用 numpy.random.choice随机采样
使用 numpy.random.choice随机采样: 说明: numpy.random.choice(a, size=None, replace=True, p=None) 示例: >> ...
- 【LeetCode】Longest Substring with At Most Two Distinct Characters (2 solutions)
Longest Substring with At Most Two Distinct Characters Given a string, find the length of the longes ...
- System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded
昨天客户跟我说,突然一个页面频繁地报ThrowIfMaxHttpCollectionKeysExceeded这个异常.而且是数据量大的时候报错,数据量小的时候OK. 根据异常的名称也能看得差不多超过了 ...
- API接口规范
协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有 ...
- getOutputStream() 的问题
小谢叫我看一下01服务器上的医药平台,说抛了很多异常出来,看一下,大部分都是因为登录的时候验证码那个JSP页面抛出的getOutputStream() has already been called ...