基于Web Socket网络实时通讯的研究外文翻译资料

 2022-09-01 17:50:39

英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料


基于Web Socket网络实时通讯的研究

摘要

关于传统网络实时通信解决方案的局限性如轮询、长轮询、flash插件,建议在网络实时通信领域使用新的即将到来的网络套接字技术,并且引入网络套接字技术的特点,分析了web Socket协议的区别和HTTP协议,同时提供一种方法来实现客户端和服务器端的网络套接字。通过一个实验证明网络套接字可以大大减少网络流量和延迟,使网络套接字在网络实时通信的应用充满前景。

关键词:网络套接字,全双工,HTTP流媒体;长轮询;延迟。

  1. 介绍

在快速发展的信息时代,网络已经成为人类生活中必不可少的一部分。人们对于网络的需求从Web1.0时代的信息获取,到Web2.0时代的信息交互,到现在的遵守于价格体系、电子商务系统和新闻播报系统的即时交互。

目前,客户端浏览器和服务器之间的通信是基于超文本传输协议(HTTP)。这是一种基于请求——响应的应用程序层协议,并且是无状态的。HTTP客户端发起一个请求。它建立了传输控制协议(TCP)连接。收到客户的请求消息后,服务器发回一个消息作为响应和终止连接。在这种模式下,服务器不能发送实时数据给客户端。因此,诸如Flash,Comet,和Ajax长轮询等技术已应用于实现客户端和服务器之间的实时通信。然而,由于其中一些需要在浏览器安装插件,使得这些技术不能实现实时通讯。他们中的一些给服务器带来沉重的负担。HTML5和Web Socket协议的出现实现了在基于Web的系统中数据的实时传输。到目前为止,他们被认为是解决这个问题的最好方案。

  1. 传统的网络实时通信解决方案

在过去,轮询,长轮询和HTTP流媒体是Web开发人员实现浏览器和服务器之间实时通信所使用的主要解决方案。用自动运行的程序去代替用轮询方法手动刷新页面是最早应用于浏览器端实现实时通信的解决方案。容易安装启用以及对于客户机和服务器没有额外的要求是这种解决方案的一个大的优势。然而,在这种解决方案中也存在着很多缺点。很难找出数据更新的频率,所以浏览器就不能及时获得最新的数据。此外,在没有数据的情况下更新发生在一段时间内,浏览器的频繁请求将产生不必要的网络流量,导致服务器不必要的负担。

为了使服务器与浏览器在任何时间都可以进行通信,网络开发员设计了一种新的叫做长轮询或Comet的访问机制,通过该服务器将在一段时间保存浏览器的新请求,而不是立即发送响应。如果数据更新发生在这一时期,服务器将使用新数据加以响应,当接收到响应后,浏览器将发出另一个请求[1]。通过这种机制,浏览器可以及时地从服务器端获得最新的数据。然而,如果有大量的并发情况发生,通过维护这些尚处于活动状态的HTTP连接来对服务器内存和计算能力进行协调掌握。开发人员也尝试“HTTP流媒体”访问机制。其主要区别是服务器不会关闭由浏览器发起的连接。服务器将使用这个连接在任何时间发送消息。在这种情况下,由于服务器不会发送信号来告知连接的完成,服务器端的响应将可能被网络中的防火墙和代理服务器缓冲缓冲掉,导致在浏览器接收数据发生一些错误。

轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。优点:后端程序编写比较容易。缺点:请求中有大半是无用,浪费带宽和服务器资源。

长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。优点:在无消息的情况下不会频繁的请求。缺点:服务器hold连接会消耗资源。

  1. Web Socket介绍

网络套接字,作为一个新的HTML5特性,被定义为一种技术。它使网页能够使用Web Socket协议与远程主机进行全双工通信。介绍了网络套接字接口,并定义了一种全双工通信通道,这种通道在网络上通过一个单一的套接字进行操作[2]。HTML5 Web Socket有效地、以最小的开销提供一个套接字连接互联网。它极大的减少了网络流量和相较于Ajax轮询和Comet解决方案的延迟。这些解决方案通常通过维护两个HTTP连接来传输实时日期,进而模拟全双工通信。因此,它是建立可伸缩的、实时的网络通信系统的理想技术。为使用HTML5 Web Socket通过另一个远程端点与Web客户端进行连接,新的Web Socket实例必须要用一个有效的URL 进行初始化,这代表一个远程端点被连接。Web Socket定义ws://和wss://分别作为Web Socket和安全的Web Socket连接的模式。在初始化客户端和服务器之间的握手动作期间,当将HTTP协议更新为Web Socket协议时,一个Web Socket连接被建立起来。Web Socket连接使用标准的HTTP端口(80和443),因此,它被称为“与代理服务器和防火墙友好的协议”[3]。因此,HTML5 Web Socket不需要安装任何新的硬件。没有任何中间服务器(代理或反向代理服务器、防火墙、负载平衡路由器等等),只要客户端和服务器端都支持Web Socket协议,Web Socket连接就可以成功建立。

集线器是共享带宽型网络设备,它本身没有数据处理能力,不能实现点到点的连接,所以不能实现全双工。虽然集线器可以使用双绞线,提供了两对线,但在任一时刻,只能有一对线工作,所以集线器只能是半双工的,不可能是全双工的。除非它带有部分交换机的功能。

全双工的网络必须要使用交换机组网。交换机是独享带宽型网络设备,它本身有类似PC机CPU的数据交换处理器,能够识别连接到交换机各端口上的网络设备的MAC地址,能够实现点到点的专用连接,所以能够实现全双工操作。但值得注意的是,如果要实现全双工,交换机的端口不能和集线器相连,否则这个端口也只能工作在半双工状态下。

另外,交换机具有自动识别全双工和半双工状态的功能。一台10/100Mbps自适应交换机会按照100Mbps全双工、100Mbps半双工、10Mbps全双工、10Mbps半双工的顺序,依次检测连接到端口的设备速率。如在某个传输速率和双工模式上检测成功,交换机就使用该工作模式进行数据交换工作。

  1. Web Socket连接与HTTP连接之间的比较

客户机和服务器之间的通信通常是基于HTTP连接,需要一些包头,连接到客户机的请求和服务器的响应。通过HTTP协议定义,这些包头包括了诸如协议类型、协议版本、浏览器类型、传输语言、编码类型、没时间、Cookie和Session等传输控制信息。在如Firebug和 Turning on Live HTTP Headers等软件的帮助下,包头的请求和响应可以清楚观察到。一个定义请求和响应的包头的例子如下的:

从客户端(浏览器)到服务器端:

GET /long-polling HTTP/1.1

主机: www.kaazing.com

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko/2008061017 Firefox/3.0 Accept:

text/html,application/xhtml xml,application/xml;q = 0.9, */*; q = 0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q = 0.7,*;q = 0.7

Keep-Alive: 300

Connection: keep-alive

Cache-Control: max-age = 0

Referer: http://www.example.com/

From server to client (browser):

Date: Tue, 16 Aug 2008 00:00:00 GMT

Server: Apache/2.2.9 (Unix)

Content-Type: text/plain

Content-Length: 12

Hello World

通过上面两个包头的展示,除了数据“Hello World”,对于在客户端和服务器端交互期间最后的使用者而言,大多数这些包头中的数据都是没用的,更不用说Cookie和Session(包含在这两端的信息通常不止有大多数网站里包头中的控制信息)。而且,这些不同类型的包头将包含在每一次交互中。所以,如果采取轮询和Comet的解决方案,它必须浪费大量的带宽,产生大量的网络流量。除此之外,构建和分析包头会占用一些时间,用于处理请求和响应,从而导致一定程度的延迟。轮询和Comet的这些缺点暗示着在将来,这两种技术势必会被其他实时通信技术替代。让我们会回到Web Socket连接。

网络套接字使用HTTP的升级机制,升级到Web Socket协议[4]。Web Socket的握手机制兼容HTTP。因此,HTTP服务器可以与Web Socket服务器共享缺省的HTTP和HTTPS端口(80和443)。为了建立一个新的Web Socket连接,在初始化客户端和服务器端的握手时,HTTP协议必须升级到Web Socket协议。一旦连接建立起连接,Web Socket将基于基于全双工模式

在客户机和服务器之间来回传输数据。初始化握手的包头给出如下:

从客户端(浏览器)到服务器端:

GET /text HTTP/1.1 Upgrade: WebSocket

Connection: Upgrade

主机:www.websocket.org

From server to client (browser):

HTTP/1.1 101 WebSocket Protocol Handshake

Upgrade: WebSocket

Connection: Upgrade

Hello World

很明显就可以看出,Web Socket连接的包含在包头中的控制信息明显少于HTTP连接的包头中的。另一方面,根据Web Socket协议的规范,Cookie和Session在Web Socket连接的包头中是不允许存在的。第一,也是最重要的,一旦连接被成功建立,客户端就可与服务器端自由通信,只有两位的控制信息附加给需要数据的最终用户。这两位控制信息由utf - 8编码,一个是“ x00”,定位于开始;另一位是“ xFF”,定位于结尾。Web Socket的这个定义使得处理Web Socket连接中包头所占用的带宽和耗费的时间都显著减少,导致产生更少的网络流量,更好地降低延迟。这些都是Web Socket比轮询和Comet更适合应用于基于Web的实时通信的确切原因。从安全的观点来看,Web Socket协议和HTTP协议都能实现安全传输。Wss和https是他们各自的安全传输协议。所以在网络流量、延迟和安全等方面,Web Socket都被认为是实现实时通信的理想技术。

  1. Web Socket技术的实现
  2. Web Socket在客户端的实现

在客户端的实现相对简单。下面是W3C工作组织给出的Web Socket接口定义[5]

[Constructor(in DOMString url, in optional DOM- String protocol)]

interface WebSocket { readonly attribute DOMString URL;

// 准备状态

const unsigned short CONNECTING = 0;

const unsigned short OPEN = 1;

const unsigned short CLOSED = 2;

readonly attribute unsigned short readyState;

readonly attribute unsigned long bufferedAmount;

//连接网络

attribute Function onopen;

attribute Function onmessage;

attribute Function onclose;

oolean send(in DOMString data);

void close();

};

根据接口的定义和构造函数,一个新的Web Socket实例需用两个参数对其进行初始化,其中的一个参数是一个有效的网络地址,是必要的;另一个参数是协议类型,是可选的。在浏览器中,Web Socket对象是由JavaScript进行操作。可用一段简单的代码创建一个新的Web Socket实例:var myWebSocket = new WebSocket (“ws://www.websocket.org”);

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[147713],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。