首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

(转)HTML 5 Web Socket:上一次Web通信革命揭幕

2012-11-04 
(转)HTML 5 Web Socket:下一次Web通信革命揭幕HTML 5 Web Socket:下一次Web通信革命揭幕?图 1:Comnet程序

(转)HTML 5 Web Socket:下一次Web通信革命揭幕

HTML 5 Web Socket:下一次Web通信革命揭幕

    ?
    图 1:Comnet程序的复杂性

    当你试图向外扩展那些Comet解决方案时,情况变得更糟糕,模拟基于HTTP的双向通信容易出错,即使最终用户感觉某些东西看起来象是一个实时Web应用程序,但这种“实时”体验的代价都是非常高昂的,需要付出更多的延迟等待时间,不必要的网络流量和对CPU性能的拖累。

      ?
      图 2:一个JavaScript股票行情应用程序

      注意:后端的股票源每秒实际上产生了大量的股票价格更新,因此使用每秒一次轮询的方式比使用长轮询方式更好,长轮询会产生许多连续的轮询,轮询会更有效地阻止传入更新。

      这一切看起来还不错,但仔细观察,你就会发现这种应用程序存在严重的问题,例如,使用Firefox的Firebug插件(允许你调试网页和监控页面加载和脚本执行时间),你可以看到每秒都有一个GET请求砸向服务器。打开Live HTTP Headers(另一个Firefox 插件,显示实时的HTTP消息头流量)揭示每个请求关联的消息头开销数量是相当惊人的。下面两个例子显示了一个请求和响应的HTTP消息头数据。

      例2:HTTP请求头

        ?
        图 3:比较轮询和WebSocket应用程序之间的网络吞吐量

        延迟减少怎么样呢?看看图4便知,图中上半部分显示了半双工轮询方案的延迟,这里我们假设消息从服务器传输到浏览器需要50毫秒,轮询方式引入许多额外的延迟,因为当响应完成时,一个新的请求已经发送到服务器了,这个新请求又需要50毫秒,在此期间服务器不能发送任何消息给浏览器,导致额外的服务器内存消耗。

        图4下半部分显示了Web Socket方式产生的延迟,一旦连接升级到Web Socket,消息的传输会更及时,从服务器传输到浏览器仍然需要50毫秒,但Web Socket连接保持打开,之后就再也不用向服务器发送请求了。

        (转)HTML 5 Web Socket:上一次Web通信革命揭幕?
        图 4:轮询和Web?Socket应用程序之间的延迟对比

        HTML5 Web Socket和Kaazing WebSocket网关

        目前,只有Google的Chrome浏览器原生支持HTML 5 Web Socket,但其它浏览器也将提供支持,若要解决这个限制,Kaazing Web Socket网关为所有旧浏览器(IE 5.5+,Firefox 1.5+,Safari 3.0+和Opera 9.5+)提供了一个完整的Web Socket仿真,因此你现在就可以使用HTML 5 Web Socket API。

        Web Socket很了不起,但在你的浏览器中有一个全双工套接字连接后可以做什么呢?为了充分利用HTML 5 Web Socket的全部功能,Kaazing为二进制通信提供了一个ByteSocket库,为诸如Stomp、AMQP、XMPP、IRC等协议提供了更高级的库,它们都是建立在Web Socket之上的。

        例如,如果你为Stomp或AMQP协议使用了一个更高级的库,这时你可以直接与后端消息代理如RabbitMQ进行通信,通过直接连接服务,不再需要额外的应用程序服务逻辑将这些双向,全双工TCP后端协议转换成非双向,半双工HTTP连接,因为浏览器本身就可以理解这些协议。

        (转)HTML 5 Web Socket:上一次Web通信革命揭幕?
        图5?:Kaazing?Web?Socket网关扩展基于TCP的消息,并具有更好的性能

        总结

        HTML 5 Web Socket在实时Web应用扩展性方面朝前迈出了一大步,正如你在本文中所看到的,HTML 5 Web Socket可以提供5000:1或 – 根据HTTP消息头大小 – 1000:1的比例减少不必要的HTTP头流量和3:1的比例减少通信延迟,这不是一个渐进式的改进,而是一次革命性的飞跃。

        Kaazing Web Socket网关让HTML 5 Web Socket代码能够在所有浏览器中运行,同时提供额外的协议库允许你充分利用HTML 5 Web Socket提供的全双工套接字连接功能,直接与后端服务进行通信。

        1 楼 zerostar88 2010-04-21   http://www.qqread.com/webhtml/u486674.html 2 楼 zerostar88 2010-05-04   一个非常好的HTML5演示
        http://directguo.com/html5/#slide1 3 楼 zerostar88 2010-08-18   src: http://notor.me/tag/websocket
        Web Socket其实是一个老早就应该实现推广的通信协议。现在的浏览器和服务器之间的通信,都是采用半双工(half-duplex)的方式,通常需要浏览器向服务器发出一个http request,服务器才会响应给予数据作为回应。服务器端只有在某些特殊实现中才有能力向客户端push数据。 那么对于一些需要实时更新内容的情况,比如通过网页显示实时(或者接近实时)股票价格,要么通过轮询(polling),每隔几秒向服务器请求更新数据;要么用(long polling)的办法,浏览器每次接到服务器的回应就再次向服务器发出一个http request,而服务器端在收到后保持等待,直到相关的数据(比如股票价格)更新了,再把更新的结果作为回应发给浏览器,之后反复,这样浏览器相当于一直保持监听服务器端内容变化的状态。 很明显,第一种方式会把信息传输浪费在不断的发送http request上,长长的header部分被不断重复,浪费带宽。第二种方式不会浪费带宽,可以接受,Comet技术通常就是采用Ajax实现的long polling方式模拟全双工的通信的,streaming是适用于其他情况(比如在线播放视频)的另一种方式。

        而Web Socket实现了真正的浏览器和服务器间全双工通信,在这一协议规范下,服务器的push是很自然的通信行为。同polling相比,Web Socket连接一旦建立,只有在有必要的时候才发送帧(trame)通信,因此高效得多。即使与long polling相比,通信的次数虽然一样多,但是Web Socket的帧头的标记性部分也比long polling的request的header部分简洁得多(几个字节与几K字节的差别),显著减少了无效字节的传送。

        在有了更高效的浏览器和服务器通信协议的前提下,带宽利用率有望大幅度提高,这时候内容更为丰富的新一代HTML5规范适时登场了,它将替代目前的HTML 4和XHTML 1。Web Socket作为HTML5的原生支持模块出现。不过到目前为止HTML5还只是草案(draft specification),业界有部分人认为HTML5到成为通行标准还需要很长时间,但是另一部分人(包括我在内)相信HTML5会在今年内成为W3C的推荐标准,在2011年得到广泛应用。

        现在的浏览器开发市场格局已经与以前大不相同了,Chrome发展极其迅速,Firefox成长稳健,Safari随着苹果的走强也呈现上升趋势,Opera有着忠诚的用户,这些都让IE的份额不断下滑。根据NetApplication今天(2010年5月6日)最新发布的浏览器市场份额调查数据,Chrome的市场占有率已经上升到6.7%,Firefox也上升到24.59%,IE下滑至59.95%。

        当年微软用IE的精兵强将打败网景之后,逐渐取得了绝对垄断,之后就将精锐的IE开发团队抽调分散到了其他部门,大好江山就这样停滞在IE6这个傻逼版本好些年。最近愈演愈烈的浏览器市场竞争明显让IE开发加快了进度,也是在今天,IE9发布了第二个预览版,宣布支持HTML5的GPU硬件加速。昨天才发布的Chrome 5 Beta版,进一步增加了对HTML5新特性的支持(drag-and-drop capabilities和Geo-location信息)。苹果跟Adobe势不两立之后,通过HTML5在其iPhone OS中实现网页视频和互动已经在4月初的keynote iPhone OS 4.0发布会上由乔帮主不停地用amazing,fantastic形容过了。Chrome和Safari使用的都是由苹果创立的HTML5开源渲染引擎 WebKit。Firefox,Opera在支持HTML5新特性上也一如既往走在前列。 短时间内,如此频繁的演变让人对主流浏览器全面拥抱HTML5的前景毫不怀疑。 但是Web Socket — HTML5的原生支持者呢? 浏览器客户端方面,现在支持Web Socket的只有最新的Chrome和Safari,Mozilla计划在下一版本Firefox 3.7中提供支持。

        移动浏览器方面,目前仅发布开发者版本的iPhone OS 4.0的Safari已经支持Web Socket,完全向用户发布之后就就可以在iPad,iPhone和iTouch中使用了。相信同样使用WebKit的Android很快就会提供支持。这里有一个可爱的小脚本可以测试你当前的服务器是否支持Web Socket。

        服务器端方面,最早小巧可爱的Jetty从7.0.1版本开始支持Web Socket,现在还有由Chrome的开发版本Chromium的团队开发的pywebsocket提供对Apache Http Server的Web Socket扩展;Caucho’s Resin包含有对Web Socket的实现,JBoss的Netty有一个支持Web Socket的补丁;Kaazing Open Gateway是一款开源的Web Socket解决方案,一方面提供Web Socket服务器,可以与其他使用Web Socket规范的服务器(比如Gmail服务器)直接用全双工方式通信,另一方面他们提供了一个可以在当前所有web浏览器中模拟Web Sockets的JavaScript类库。Kaazing可谓是目前致力推广Web Socket HTML5的生力军,大量相关的介绍文章,报告,培训都是由他们提供的。Kaazing提供的开源技术,保证了即使在不是所有的浏览器都完全支持Web Socket的当前局面下,开发人员可以着手开发Web Socket HTML5应用,为美好的将来做准备。 除此以外还有基于Perl,Ruby和php的其他服务器方案,可以参考Web Socket的Wikipedia页面。

        总结,从当前的情况来看,我对Web Socket HTML5在短期内获得快速发展充满信心。当然前景完全取决于Apple,Google和微软几大巨头的竞争和互动 4 楼 zerostar88 2010-08-18   http://www.slideshare.net/ffdead/the-html5-websocket-api
        http://www.slideshare.net/sullis/programming-websockets-oscon-2010
        http://tech.it168.com/a2010/0317/861/000000861817_3.shtml

热点排行