WebSockets作为一种网站建设的新协议

发布时间:2014-7-29 3:49:20

WebSockets作为一种网站建设的新协议

  WebSockets作为一种新协议登上了WWW的舞台,但这并不意味着超文本传输协议的终结。WebSocket协议仅是针对特定应用程序在服务器端与客户端之间的双向通信的一种便捷的实现方案。
  如第一个初级聊天程序案例所示,服务器端及客户端的API编程都非常容易。
  而在宁波网站建设最后的案例展示了一个成熟的多人在线游戏Battleships!。另外,服务器端和客户端之间的通信可以通过简短几行JavaScript代码实现,越少代码意味着出现错误的可能性越小。
  WebSockets的引人让Web应用程序的编程变得简单,而不再需要辛苦地借助XMLHttpRequests或反复刷新页面。就如同股票交易系统的案例那样,我们可以在一个网站上轻松监视大量频繁变动的数据。
  在使用JavaScript的过程中,你可能已见过以下浏览器信息:此页面上的脚本可能正忙,或已停止响应(Ascriptonthispagemaybebusy,oritmayhavestoppedresponding)。这可能是因为一个程序错误,譬如说死循环。但若在JavaScript没有出错的情况下依然运算时间过长,你该怎么办呢?这就是多线程(WebWorker)存在的意义。
  WebWorker介绍
  为保证客户端的长时间运算不会导致浏览器卡死,我们在后台增加一个(并发)线程,随时将运算状态信息通知给相应脚本。这个线程无权访问DOMAPI、window对象或document对象。乍一看这像是一种很大的限制,但却有其合理性一若脚本并行访问同一资源并对其作出改变,将出现非常复杂的情况。多线程之间的严格隔离及它们的信息通信方式让JavaScript代码更为安全。
  对于浏览器来说,开启新线程会导致操作系统更密集的运算,并且每个线程都要消耗额外的存储空间。尽管如此,其优势依然明显:浏览器可保持响应,复杂运算得以并行运行,在当前主流的硬件平台上这实际会提升运算速度(译者注:因为现在的硬件性能非常强大,所以多线程运算能够更充分地发挥硬件的性能)。
  每个新线程在创建时都会载入包含其代码的脚本:varw=newWorker("calc.js");这个脚本(这里用的是calc.js)包含了调用线程时所执行的脚本。该线程包含了用于响应message事件的事件句柄。在这个例子中,它能够为线程提供运算所需的数据并触发计算:
  addEventListener('message',function(evt){//evt.datacontainsthedatapassed函数postMessageO实现了主调脚本和线程之间的双向数据传输。以下代码将数据传给线程w:
  w.postMessage(imgData);
  浏览器会将JavaScript对象转换为JSON字符串,并传递给主调函数postMessage()。此数据每次调用都会被复制,这意味着如果出现大量数据传输时,执行速度将会显著下降。
  如前所述,线程无法访问window对象。但WindowTimers接口的函数是个例外:setTimeout()/clearTimeout()及setlnterval()/clearlnterval()都可在线程内使用。另外线程也能加载外部脚本,这可以使用importScriptsO函数。我们可以将一个或更多JavaScript文件(通过逗号分开)传递给此函数,然后通过线程加载并使用。
  线程还能以只读方式访问本地对象——通过href属性将一个绝对URL回递至正在运行的线程中。依靠XMLHttpRequest,线程也可以与Web服务通信。
  规范将WebWorker分为专用线程(DedicatedWorkers)及共享线程(SharedWorkers)。共享线程能够接受来自不同脚本的信息,并将它们自己的信息发送给各脚本。
  本文由乐华网络编辑,转载请注明出处
  宁波网站建设www.leseo.net
上一篇:
变换(Transformations)Canvas的变换基于直接操纵坐标系统。在移动一个矩形的同时,
下一篇:
checkValidity函数要在输入元素时即时验证有效性,宁波网站建设需要用到checkValid
关于乐华
乐华介绍
乐华思维
人才招聘
使用条款
隐私保护
RSS订阅
网站地图
新闻动态
乐华观点
行业动态
频道介绍
服务介绍
案例展示
品牌研究
品牌理论
品牌体系
联系我们
400-680-2900
社会媒体
微信公众平台
微信公众平台