APP下载

HTML5中的WebSocket 技术浅析

2016-05-14郑志明林鹏涛

知音励志·社科版 2016年6期

郑志明 林鹏涛

摘 要 本文首先对WebSocket的定义及相关技术进行了简要的说明,并与传统的HTTP协议进行了简要对比,通过一个例子阐述了WebSocket技术的优点以及它的主要应用领域,最后简要的描述了WebSocket的使用方法。

【关键词】WebSocket;HTTP;HTML5

随着Web技术和移动互联网的快速发展,HTML5越来越被人们所关注并受到软件开发人员的喜爱,可以这么说HTML5是近十年来Web开发标准过程中最巨大的飞跃。相对以往的版本,HTML5并非只是用来表示Web文件中的内容,它的最新使命是将Web带入一个更加成熟的应用平台。作为下一代的Web标准,HTML5拥有许多引人注目的新特性,如Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web的TCP”之称的WebSocket 格外吸引Web开发人员的注意。

1 WebSocket是什么?

WebSocket是HTML5规范中一种新的浏览器与服务器之间进行通信的协议规范,它的主要功能是为了实现了浏览器与服务器之间的全双工通信。通常基于B/S结构的程序都是通过HTTP协议来进行通信的,而HTTP协议仅能实现单向的通信,即请求只能从浏览器发出,服务器被动的接收请求后进行响应。

1.1 WebSocket是一种协议

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

1.2 WebSocket协议与传统的HTTP协议的区别与联系

WebSocket协议与传统的HTTP协议即有区别也有联系,主要表现在以下向个方面:

(1)WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和浏览器都能主动的向对方发送或接收数据;而HTTP协议只是一种单向的通信协议,建立连接后服务器不能主动的向浏览器发送数据,它只有在接收到浏览器的请求后才能对浏览器发送数据。

(2)WebSocket通信首先需要通过握手连接,于TCP协议类似,TCP连接首先也需要进行客户端和服务器端的握手连接,握手连接成功后才能进行相互通信;而HTTP协议不需要进行握手连接。

(3)WebSocket与HTTP协议都是基于TCP协议的,它们都属于应用层的协议,所以他们也都是可靠的协议。两个协议还有密切的关联,当WebSocket在建立握手连接时,数据是通过HTTP协议传输的,但是在握手连接建立之后,真正的数据传输阶段就不再需要HTTP协议的参与了。

2 为什么要使用WebSocket?

为了说明WebSocket的优势是什么,也就是说明我们为什么要使用WebSocket,我们通过一个例子来解释。在WebSocket未出现的时候,程序员如果想通过HTTP这种无状态连接来实现即时通讯类似的功能,通常有以下几种方法:

2.1 Ajax轮询

它的原理非常简单,就是通过Ajax定时向服务器发送请求,询问服务器是否有最新的消息,服务器如果有就发送最新的信息,如果没有就什么事也不做。这种方式的缺点是会生成许多无用的请求,造成网络无谓的数据传输,因此这是一种比较低效的方法。

2.2 长轮询

这是一种对Ajax轮询改进和提高的方法,主要是为了降低网络上无谓传输。当浏览器请求服务器时,如果服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态有所改变或者时间过期,通过这种机制来减少浏览器和服务器之间无谓的交互。如果服务端的数据更新很频繁,相比Ajax轮询这种方法也没有本质上的性能提高。

如何解决类似即时通讯这种实时问题了,如果还是通过HTTP这种无状态的协议来解决这类问题,是没有什么好的办法的,于是人们迫切希望有一种能比HTTP无状态协议更好的通信协议,这种通信协议可以实现浏览器和服务器双向的通信,服务器不再是被动的数据接收方,它也可以变为了主动的数据发送方。在HTML5规范中,它们把这种通信协议称为:WebSocket。

3 WebSocket的主要应用领域

根据之前我们的讨论,我们可以得知WebSocket在应用数据要进行实时的更新时有先天的优势,这是WebSocket产生的主要原因,也将是WebSocket的主要应用方向。它的应用领域非常多,比如:社交订阅、多玩家游戏、多媒体即时通信、协同编辑/编程、股票基金报价、在线教育、体育实况更新等。

4 如何使用WebSocket?

使用WebSocket非常简单,它与使用HTTP协议与服务器建立请求连接还是有区别的。HTML5中规范中说明WebSocket的连接建立在浏览器中可以通过Javascript提供的一组API来进行。这组API的使用也非常简单,简单的使用如图1所示。

而在服务器端中也有很多实现了WebSocket规范的技术,以JAVAEE来说,从JAVAEE7.0开始就已经对WebSocket提供了支持,读者只需根据其接口要求继承相关类并覆写相关方法就可以完成WebSocket服务器端的建立。

5 结语

本文通过什么是WebSocket?、为什么要使用WebSocket?、怎样使用WebSocket?三个问题的解答为读者简要介绍了WebSocket的基本内容。虽然WebSocket 的优势非常明显,应用领域非常多,但是我们也应该看到它也有一定的局限性。

(1)当前WebSocket 规范目前还处于草案阶段,也就是它的规范和API还是有变动的可能。

(2)当前,和其他的主流浏览器相比,比如谷歌的Chrome、火狐的Firefox浏览器,作为占市场份额最大的微软IE浏览器对HTML5的支持是相对比较差的,这也是我们在构建Web应用时候必须要考虑的一个问题。

所以我们迫切希望WebSocket能尽快出台正式的规范,也希望所有浏览器都能完全的支持HTML5的规范,这也是广大程序员共同的愿望。相信这一天就会是不远的明天。

作者单位

赣南师范大学科技学院 江西省赣州市 34100