WebSocket简单介绍(1)

时间:2023-06-27 18:19:38

HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas、本地存储、多媒体编程接口、WebSocket等等。今天我们就来看看具有“Web TCP”之称的WebSocket.

WebSocket的出现是基于Web应用的实时性需要而产生的。这种实时的Web应用大家应该不陌生,在生活中都应该用到过,比如新浪微博的评论、私信的通知、腾讯的WebQQ、人人网聊天、在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等。让我们来回顾下实时 Web 应用的窘境吧。

在 WebSocket 规范出来之前,开发人员想实现这些实时的 Web 应用,不得不采用一些折衷的方案,其中最常用的就是轮询 (Polling) 和 Comet 技术,而 Comet 技术实际上是轮询技术的改进,又可细分为两种实现方式,一种是长轮询机制,一种称为流技术。下面我们简单介绍一下这几种技术:

  • 轮询:这是最早的一种实现实时 Web 应用的方案。客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。这种同步方案的缺点是,当客户端以固定频率向服务 器发起请求的时候,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,所以这是一种非常低效的实时方案。
  • 长轮询:是对定时轮询的改进和提高,目地是为了降低无效的网络传输。当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态改变或者 时间过期,通过这种机制来减少无效的客户端和服务器间的交互。当然,如果服务端的数据变更非常频繁的话,这种机制和定时轮询比较起来没有本质上的性能的提 高。
  • :常就是在客户端的页面使用一个隐藏的窗口向服务端发出一个长连接的请求。服务器端接到这个请求后作出回应并不断更新连接状态以保证客户端和服务 器端的连接不过期。通过这种机制可以将服务器端的信息源源不断地推向客户端。这种机制在用户体验上有一点问题,需要针对不同的浏览器设计不同的方案来改进 用户体验,同时这种机制在并发比较大的情况下,对服务器端的资源是一个极大的考验。

上述方式其实并不是真正的实时技术,只是使用了一种技巧来实现的模拟实时。在每次客户端和服务器端交互的时候都是一次 HTTP 的请求和应答的过程,而每一次的 HTTP 请求和应答都带有完整的 HTTP 头信息,这就增加了每次传输的数据量。但这些方式最痛苦的是开发人员,因为不论客户端还是服务器端的实现都很复杂,为了模拟比较真实的实时效果,开发人员 往往需要构造两个HTTP连接来模拟客户端和服务器之间的双向通讯,一个连接用来处理客户端到服务器端的数据传输,一个连接用来处理服务器端到客户端的数 据传输,这不可避免地增加了编程实现的复杂度,也增加了服务器端的负载,制约了应用系统的扩展性。

基于上述弊端,实现Web实时应用的技术出现了,WebSocket通过浏览器提供的API真正实现了具备像C/S架构下的桌面系统的实时通讯能 力。其原理是使用JavaScript调用浏览器的API发出一个WebSocket请求至服务器,经过一次握手,和服务器建立了TCP通讯,因为它本质 上是一个TCP连接,所以数据传输的稳定性强和数据传输量比较小。

WebSocket 的拯救

HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。 浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。因为 WebSocket 连接本质上就是一个 TCP 连接,所以在数据传输的稳定性和数据传输量的大小方面,和轮询以及 Comet 技术比较,具有很大的性能优势。Websocket.org 网站对传统的轮询方式和 WebSocket 调用方式作了一个详细的测试和比较,将一个简单的 Web 应用分别用轮询方式和 WebSocket 方式来实现,在这里引用一下他们的测试结果图:

aaarticlea/png;base64,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*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*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" alt="" />

通过这张图可以清楚的看出,在流量和负载增大的情况下,WebSocket 方案相比传统的 Ajax 轮询方案有极大的性能优势。这也是为什么我们认为 WebSocket 是未来实时 Web 应用的首选方案的原因。

WebSocket 协议

WebSocket 协议本质上是一个基于 TCP 的协议。为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息”Upgrade: WebSocket”表 明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道*的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。

下面我们来详细介绍一下 WebSocket 规范,由于这个规范目前还是处于草案阶段,版本的变化比较快,我们选择 draft-hixie-thewebsocketprotocol-76版本来描述 WebSocket 协议。因为这个版本目前在一些主流的浏览器上比如 Chrome,、FireFox、Opera 上都得到比较好的支持,您如果参照的是新一些的版本话,内容可能会略有差别。

一个典型的 WebSocket 发起请求和得到响应的例子看起来如下:

WebSocket 握手协议
 //客户端到服务端:
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: Y3 .P00
Upgrade: WebSocket
Sec-WebSocket-Key1: @ 46546xW%0l
Origin: http://example.com
[-byte security key] //服务端到客户端:
HTTP/1.1 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://example.com
WebSocket-Location: ws://example.com/demo
[-byte hash response]

这些请求和通常的 HTTP 请求很相似,但是其中有些内容是和 WebSocket 协议密切相关的。我们需要简单介绍一下这些请求和应答信息,”Upgrade:WebSocket”表示这是一个特殊的 HTTP 请求,请求的目的就是要将客户端和服务器端的通讯协议从 HTTP 协议升级到 WebSocket 协议。从客户端到服务器端请求的信息里包含有”Sec-WebSocket-Key1”、“Sec-WebSocket-Key2”和”[8-byte securitykey]”这样的头信息。这是客户端浏览器需要向服务器端提供的握手信息,服务器端解析这些头信息,并在握手的过程中依据这些信息生成一 个 16 位的安全密钥并返回给客户端,以表明服务器端获取了客户端的请求,同意创建 WebSocket 连接。一旦连接建立,客户端和服务器端就可以通过这个通道双向传输数据了。

在实际的开发过程中,为了使用 WebSocket 接口构建 Web 应用,我们首先需要构建一个实现了 WebSocket 规范的服务器,服务器端的实现不受平台和开发语言的限制,只需要遵从 WebSocket 规范即可,目前已经出现了一些比较成熟的 WebSocket 服务器端实现,比如:

  • Kaazing WebSocket Gateway — 一个 Java 实现的 WebSocket Server
  • mod_pywebsocket — 一个 Python 实现的 WebSocket Server
  • Netty —一个 Java 实现的网络框架其中包括了对 WebSocket 的支持
  • node.js —一个 Server 端的 JavaScript 框架提供了对 WebSocket 的支持

如果以上的 WebSocket 服务端实现还不能满足您的业务需求的话,开发人员完全可以根据 WebSocket 规范自己实现一个服务器。在“WebSocket 实战”这一节,我们将使用 Microsoft .NET 平台上的 C# 语言来打造一个简单的 WebSocket 服务器,继而构建一个简单的实时聊天系统。