WebSocket简介及原理

WebSocket简介html

Web系统的应用有时客户端须要实时的得到服务器消息,但默认HTTP协议只支持请求响应模式,这样作能够简化Web服务器,减小服务器的负担,加快响应速度,由于服务器不须要与客户端长时间创建一个通讯连接,但不容易直接完成实时的消息推送功能,如聊天室、后台信息提示、实时更新数据等功能,但经过polling、Long polling、长链接、Flash Socket可完成该功能须要。web

Polling:客户端定时向服务器发送Ajax请求,服务器接到请求后立刻返回响应信息并关闭链接。  优势:后端程序编写比较容易。  缺点:请求中有大半是无用,浪费带宽和服务器资源。  实例:适于小型应用。后端

Long-Polling:客户端向服务器发送Ajax请求,服务器接到请求后hold住链接,直到有新消息才返回响应信息并关闭 链接,客户端处理完响应信息后再向服务器发送新的请求。  优势:在无消息的状况下不会频繁的请求,耗费资小。  缺点:服务器hold链接会消耗资源, 返回数据顺序无保证,难于管理维护。浏览器

长链接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长链接的请求或是采 用xhr请求,服务器端就能源源不断地往客户端输入数据。  优势:消息即时到达,不发无用请求;管理起来也相对便。  缺点:服务器维护一个长链接会增 加开销。  实例:Gmail聊天服务器

基于 Flash,AdobeFlash 经过本身的 Socket 实现完成数据交换,再利用 Flash 暴露出相应的接口为 JavaScript 调用,从而达到实时传输目的。此方式比轮询要高效,且由于 Flash 安装率高,应用场景比较普遍,但在移动互联网终端上 Flash 的支持并很差。IOS 系统中没有 Flash 的存在,在 Android 中虽然有 Flash 的支持,但实际的使用效果差强人意,且对移动设备的硬件配置要求较高。2012 年 Adobe 官方宣布再也不支持 Android4.1+系统,宣告了 Flash 在移动终端上的死亡。 websocket

传统 Web 模式在处理高并发及实时性需求的时候,会遇到难以逾越的瓶颈,咱们须要一种高效节能的双向通讯机制来保证数据的实时传输。在此背景下,基于 HTML5 规范的、有 Web TCP 之称的 WebSocket 应运而生。 早期 HTML5 并无造成业界统一的规范,各个浏览器和应用服务器厂商有着各异的相似实现,如 IBM 的 MQTT,Comet 开源框架等,直到 2014 年,HTML5 在 IBM、微软、Google 等巨头的推进和协做下终于尘埃落地,正式从草案落实为实际标准规范,各个应用服务器及浏览器厂商逐步开始统一,在 JavaEE7 中也实现了 WebSocket 协议,从而不管是客户端仍是服务端的 WebSocket 都已完备,读者能够查阅HTML5 规范,熟悉新的 HTML 协议规范及 WebSocket 支持。 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通信的网络技术。依靠这种技术能够实现客户端和服务器端的长链接,双向实时通讯。它的特色是以事件驱动的、异步的、使用ws或者wss协议的客户端socket可以实现真正意义上的推送功能。网络

HTML5 WebSockets解决了诸如代理和防火墙等网络危害,能够经过任何链接进行流式传输,而且经过单一链接支持上游和下游通讯的能力,基于HTML5 WebSockets的应用程序对服务器的负担下降,从而容许现有的机器支持 更多的并发链接。 下图显示了基本的基于WebSocket的架构,其中浏览器使用WebSocket链接进行全双工,与远程主机的直接通讯。架构

WebSocket 是一种全新的协议,不属于http无状态协议,协议名为"ws",这意味着一个websocket链接地址会是这样的写 法:ws://localhost:8080/webSocketServer。ws不是http,因此传统的web服务器不必定支持,须要服务器与浏览 器同时支持, WebSocket才能正常运行,目前的支持还不广泛,须要特别的web服务器和现代的浏览器。一下是浏览器对WebSocket支持状况:并发

WebSocket原理框架

WebSocket协议被设计更好适用于现有网络基础。做为这一设计原则的一部分,该协议规范定义了WebSocket链接开始它的生命周期做为一个HTTP链接,保证向后兼容性。从HTTP到WebSocket协议转换是指创建了WebSocket握手。

在客户端,new WebSocket 实例化一个新的 WebSocket 客户端对象,WebSocket 客户端对象会自动解析并识别为 WebSocket 请求,从而链接服务端端口,执行双方握手过程,客户端发送数据格式相似:

能够看到,客户端发起的 WebSocket 链接报文相似传统 HTTP 报文,”Upgrade:websocket”参数值代表这是 WebSocket 类型请求,“Sec-WebSocket-Key”是 WebSocket 客户端发送的一个 base64 编码的密文,要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept”应答,不然客户端会抛出“Error during WebSocket handshake”错误,并关闭链接。服务端收到报文后返回的数据格式相似:

“Sec-WebSocket-Accept”的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,“HTTP/1.1 101 Switching Protocols”表示服务端接受 WebSocket 协议的客户端链接,通过这样的请求-响应处理后,客户端服务端的 WebSocket 链接握手成功, 后续就能够进行 TCP 通信了。读者能够查阅WebSocket 协议栈了解 WebSocket 客户端和服务端更详细的交互数据格式。

WebSocket有两种实现方式,请看下节。

相关文章
相关标签/搜索