1.作为下一代网络标准,HTML5有许多引人注目的新特性,如画布、本地存储、多媒体编程接口、WebSocket等。主要有两个特点:第一,增强网页的性能。其次,增加了本地数据库等网络应用程序的功能。一系列技术组合,包括HTML、CSS和JavaScript,减少了浏览器对基于插件的富互联网应用程序(RIA)的需求,如Adobe Flash、微软Silverlight和甲骨文JavaFX,并提供了更多标准集,可有效增强网络应用程序。然而,“网络传输控制协议”支持的网络套接字打破了现有的网络通信编程模式。WebSocket使浏览器能够提供对Socket的支持,并在浏览器和服务器之间提供基于TCP连接的双向通道,使开发人员能够方便地构建实时网络应用程序。2.传统实时网络通信技术传统网络应用的信息交互过程是客户端通过浏览器发送请求,服务器接收并检查请求,然后处理请求并将结果返回给客户端,客户端浏览器显示信息。这种机制对于信息变化不是特别频繁的应用程序来说仍然是和平的,但是对于那些具有高实时性要求的应用程序来说,当客户端浏览器准备好呈现服务器返回的数据信息时,信息可能已经过时。保持客户机和服务器之间的信息同步是实时网络应用的关键。在WebSocket规范出现之前,开发人员只希望通过采用轮询或Comet等技术解决方案来实现实时网络应用,而Comet是轮询技术、长轮询机制和流技术的改进。轮询:客户机以一定的时间间隔向服务器发送请求,以通过频繁的请求保持客户机和服务器同步。问题在于,当客户端以固定频率向服务器发送请求时,服务器上的数据可能不会更新,从而导致不必要的网络传输,这是一种低效的实时方案。长轮询:长轮询是对预定轮询的改进和增强,旨在减少无效的网络传输。当服务器端没有数据更新时,连接将保持一段时间,直到数据或状态改变或时间到期。这种机制可以减少客户端和服务器之间的无效交互。当服务器端数据变化非常频繁时,定期轮询并不能显著提高性能。流:通常在客户端页面上使用隐藏窗口向服务器发送长连接请求。收到此请求后,服务器会做出响应并不断更新连接状态,以确保客户端和服务器之间的连接不会过期。将信息从服务器推送到客户端。然而,有必要为不同的浏览器设计不同的方案来改善用户体验。同时,当并发性相对较大时,这是对服务器端资源的一个很好的测试。上述方案仅使用Ajax来模拟实时效果。每一次交互都是HTTP请求和响应的过程,每次都有一套完整的HTTP头信息,增加了传输的数据量。在实际应用中,为了模拟实时效果,需要构造两个HTTP连接来模拟客户端和服务器之间的双向通信。一个连接用于处理从客户端到服务器的数据传输。连接用于处理从服务器到客户端的数据传输,这增加了编程的复杂性,增加了服务器上的负载,并限制了应用系统的可伸缩性。3.HTML 5网络套接字概念和规范网络套接字API是下一代客户机-服务器异步通信方法。ws或wss协议用来与任何客户端和服务器程序通信,而不是单一的TCP套接字。目前,WebSocket已被W3C标准化,并得到了火狐4、Chrome 4、Opera 10.70和Safari 5等浏览器的支持。在给定的时间范围内,它可以在任何时候互相推送信息。HTML5网络套接字从网络客户端连接到远程端点。您需要创建一个WebSocket实例,并为它提供一个代表您想要连接的远程端点的网址。该规范定义了分别代表网络套接字和安全网络套接字连接的WS://和WSS://模式。通过升级客户机和服务器之间的HTTP协议来建立网络套接字连接 网络套接字使用HTTP升级机制升级到网络套接字协议,并且与HTTP握手机制兼容,因此HTTP服务器可以与网络套接字服务器共享默认的HTTP和HTTPS端口(80和443)。为了建立一个网络套接字连接,客户机和服务器在初始握手期间从HTTP协议升级到网络套接字协议。客户端浏览器首先向服务器发起一个HTTP请求。这个请求不同于普通的HTTP请求,它包含一些额外的头信息。附加的标题信息“升级:网络套接字”表明这是一个申请协议升级的HTTP请求。服务器端解析附加的报头信息,并生成响应信息返回给客户端。因此,客户端和服务器端之间的网络套接字被成功建立。然后,信息通过链路信道自由传输,并继续单向关闭客户端或服务器端的连接。建立连接后,WebSocket数据帧以全双工模式在客户端和服务器之间来回传输。WebSocket请求和响应的典型示例如下:

清单1: websocket握手协议客户端到服务器:GET/demo HTTP/1.1 host:example . com connection:UpgradeSec-WebSocket-Key 2:129985 Y3 1。P00升级:WebSocketSec-WebSocket-Key1:4 1 46546 xW % 0l 1 5 rigin:http://Com[8字节安全密钥]服务器到客户端:http/1.101websocket协议handshakeupdate: websocket连接:upgradeewebsocket-origin:http://Combwebsocket-location:ws://example . Com/demo[16字节哈希响应]其中Sec-WebSocket-Key 1,Sec-WebSocket-Key2和的标头信息服务器基于以下算法生成正确的响应信息:a)逐个字符地读取Sec-WebSocket-Key1头信息中的值,将数字字符连接在一起形成临时字符串,并同时计算所有空格的数量;b)将步骤1中生成的数字串转换成整数,然后除以步骤1中计数的空格数,将获得的浮点数转换成整数类型;c)将步骤2中生成的整数值转换成符合网络传输的网络字节数组;(d)对Sec-WebSocket-Key2头信息执行步骤1至3中的操作,以获得另一个网络字节数组;e)将[8字节安全密钥]和步骤3和4中生成的网络字节数组合并为16字节数组;f)使用MD5算法为步骤5中生成的字节数组生成哈希值,该哈希值作为安全密钥返回给客户端,以表明服务器已经获得客户端的请求并同意创建WebSocket连接。服务器将生成的网络字节数组和客户端提交的头部信息中的[8字节安全密钥]组合成16位字节数组,用MD5算法加密,然后将生成的安全密钥作为响应信息返回给客户端,从而建立双方的WebSockekt连接通道,实现WebSocket握手信息的处理逻辑。网络套接字服务器由两个核心类组成,一个是网络套接字服务器,另一个是套接字连接。在实际开发过程中,为了构建一个网络应用程序,首先需要构建一个符合WebSocket规范的服务器。服务器的实现不受平台和开发语言的限制,只需要符合WebSocket规范。如果使用未加密的WebSocket连接(WS://),在透明代理服务器的情况下,浏览器不知道代理服务器,因此不会发送HTTP CONNECT方法。如果使用加密的WebSocket安全连接(WSS://),浏览器不知道透明代理服务器下的代理服务器,因此不会发布HTTPCONNECT方法。但是,由于在线信息是加密的,中间透明代理服务器将只允许加密信息通过,从而提高了使用加密WebSocket连接的成功率。HTML5 WebSocket旨在取代轮询和Comet技术,使客户端浏览器具有实时通信能力,就像C/S架构下的桌面系统一样。浏览器通过JavaScript向服务器发送建立网络套接字连接的请求。建立连接后,客户机和服务器可以通过TCP连接直接交换数据。因为WebSocket连接本质上是一个TCP连接,所以与轮询和Comet技术相比,它在数据传输稳定性和数据传输量方面具有很大的性能优势。4.网络套接字JavaScript接口的定义网络套接字JavaScript客户端接口的定义相对简单:清单2。用于建立网络套接字连接的实例JavaScript代码:var网络套接字=新网络套接字(WSServer);web socket . onOpen=function(evt){ onOpen(evt)};websocket.onclose=函数(evt){ onClose(evt)};web socket . onMessage=function(evt){ onMessage(evt)};websocket.onerror=函数(evt){ onError(evt)};函数打开(evt){控制台. log('已连接到WebSocket服务器');}函数OnClose(evt){控制台日志(“断开”);}函数onMessage(evt){console.log('从服务器检索的数据:' evt . data ');}函数onError(evt){console.log('出现错误:' evt . data ');}网址属性表示网络套接字服务器的网络地址。协议通常是“ws”。发送方法是向服务器发送数据,关闭方法是关闭连接。除了这些方法之外,还有一些非常重要的事件:onOpen、onMessage、onError和onClose。5.WebSocket应用场景5.1初始数据前台通过后台数据推送方法向客户端显示初始数据。客户可以接收到 5.2后台推送信息。前台实时更新和添加后台推送信息代码。在后台设置一个计时器,定期推送和生成或清除信息,并将信息推送至所有客户端。5.3客户端拖动节点,与其他客户端同步,增加拖动同步,监控网络中的所有信息点,并将节点位置信息发送到后台。后台收到节点位置信息后,更新后台数据,然后将消息转发给其他客户端,实现信息同步操作。6.网络套接字应用前景网络套接字是一个不断发展的网络规范。目前,使用WebSocket构建应用程序可能存在一些风险。网络套接字规范和应用编程接口有可能发生变化。尽管目前还存在一些局限性,但WebSocket将成为未来开发实时网络应用的一支生力军。