`
子衿青青
  • 浏览: 110436 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dojo WebSocket 应用

 
阅读更多

Dojo 1.6 提供了一个基于WebSocket API开发的用于实时通信的dojo socket API, WebSocket 提供了一种支持全双工通信的对象,我们可以非常方便的实时的将消息从服务端直接发送到客户端。Dojo的新 dojox.socket 模块还提供了WebSocket API所没有的基于HTTP的 long-polling。

Dojox.socket 模块设计上十分简单,轻量级并且与协议无关。原来dojo有很多针对特定协议开发的模块,如CometD 和 RestChannels, 但是还有大量的其他协议无法满足,所以 dojox.socket 模块只是简单的通过HTTP 协议或WebSocket连接 传递字符串,这也保证了他对所有系统的兼容性.

dojox.socket 最简单的使用方式:


我们现在便可以监听服务器端的消息事件:


socket.on() 用于注册监听函数,捕获后台消息事件,我么也可以用socket.connect() 实现相同的功能。

我们也可以用 send() 方法给服务器端发送消息. 但是在此之前我们通常要保证和后台的连接已经建立起来了:


最后,我们也可以监听“close”事件,判断连接的关闭情况,我们可以通过调用socket.close()来开启连接关闭的进程。

dojox.socket 也能接受一些标准的Dojo IO 参数用于初始化和服务器端的连接,比如我们可以加入我们的消息头:


这样浏览器基于自身的特点会将这些URL路径转换为WebSocket URL (using ws:// scheme) 或者HTTP URL。

有的服务器端只支持HTTP/long-polling(长轮询) (不支持真正的WebSocket). 这时候,我们可以显式创建一个基于 long-poll 的连接:


我们也可以使用dojo.io.script.get 连接到服务器. dojox.io.xhrPlugins 还支持跨域的 long-polling, 他们都能很好的和 dojox.socket 协同工作。

Auto-Reconnect

除了 dojox.socket , 我们还有 dojox.socket.Reconnect 模块. 他封装了 socket, 提供了自动重新连接的功能. 当一个socket连接由于网络或服务器的问题关闭时,他会自动周期性的重新连接服务器,此方式基于回退算法,保证了最少的资源消耗。我们能通过如下代码把一个普通的socket升级到自动重连的socket:

socket = dojox.socket .Reconnect ( socket) ;

Dojo WebSocket 和Object Stores协同工作

Dojo 1.6 新曾的另一个很强大的功能是 new Dojo object store API (取代 Dojo Data API), 基于 the HTML5 IndexedDB object store API. Dojo 1.6 支持很多对 store 的包装器, Observable store 提供了事件通知机制,能很好的和Comet driven updates 联合使用. Observable 是一个 store 包装器. 使用方式:先创建一个store,再用Observable包装他:


这个store 此时便具有 observe() 方法, 可以通过此方法绑定监听函数,用于针对data变化是做出相应处理,我们此刻便能够通过服务器端的消息得知data的变化,并手动通知store的Observe:


store.notify()中,不传入id参数则表示 新增object,不传入object参数表示删除,两个都有便是修改。

处理 Long-Polling

Long-polling(长轮询)请求和普通的polling(轮询)请求不同在于:普通的polling是一次请求,一次查询和回答(服务器返回结果),而Long-polling请求则是一次请求,多次查询,直到有消息,再回答(返回)。Long-polling 方式的连接需要服务端的支持。在很多应用中,服务器需要足够的请求中的cookie信息来决定发送什么信息到客户端。由于有很多的协议的存在,我们可以通过在请求的消息头中放入相关信息来以示区别:


dojox.socket 包含参数 Pragma: long-poll 来标识一系列 long-poll 请求中的第一个请求,从而帮助服务器处理连接的建立和超时。

我们也能用 dojox.socket 支持其他的协议:

CometD

初始化 Comet connection 连接 CometD 服务器, 我们可以进行 CometD 握手, 连接和订阅:


Socket.IO

Socket.IO 提供了一个底层的接口,类似 dojox.socket, 支持简单的文本消息传送,下面是一个连接Socket.IO服务器的例子:


Comet Session Protocol

以下是连接 Comet Session Protocol 服务器的例子:


Tunguska

Tunguska 提供了一个基于 Comet 订阅数据变化的接口,以下是一个与Tunguska 服务器通信的简单示例:


Conclusion

Dojo的socketAPI是一个和各种不同服务器建立实时连接并通信的模块,这是Dojo1.6令人振奋的一个改进。

分享到:
评论

相关推荐

    基于AJAX的DOJO架构分析与应用.zip

    - **实时通信**:结合WebSocket,DOJO可以构建实时聊天应用或实时数据监控界面。 - **复杂表单验证**:通过dijit/form组件和dojo/data,实现复杂的表单验证和提交。 - **地图应用**:利用dojox/gfx和地理信息系统...

    dojo的ppt课件和开发手册

    `dojo.io`模块则包含了更高级的I/O操作,如上传文件、WebSocket通信等。 5. **动画与效果** `dojo.fx`模块提供了一系列动画效果,如淡入淡出、滑动、旋转等,支持组合动画和时间线控制,使开发者能轻松创建复杂的...

    CSS 2.0 & Dojo1.8 chm

    4. **dojo/request API**:用于进行异步数据请求,支持JSONP、XMLHttpRequest和WebSocket等多种协议,方便与服务器进行数据交互。 5. **dojo/has功能检测**:允许开发者根据浏览器特性动态加载代码,实现更佳的向下...

    实战dojo工具包

    Dojo工具包是一款强大的JavaScript库,专为构建高性能、可扩展的Web应用程序而设计。它在Ajax技术领域中以其高效能和丰富的功能集而著称,远远超越了早期的简单原型(Prototype)库。Dojo提供了全面的解决方案,涵盖...

    dojo服务器推送技术的HelloWorld例子

    Jetty是一个轻量级、高性能的Java Web服务器和Servlet容器,它支持多种协议,包括HTTP和WebSocket,因此很适合用来配合Dojo实现Comet技术。 在实际开发中,理解并掌握Dojo的Comet技术将有助于你创建更高效、实时性...

    cometd-archetype-spring-dojo-jetty7-2.8.0-RC1.zip

    【标题】"cometd-archetype-spring-dojo-jetty7-2.8.0-RC1.zip" 提供的是一个开源项目构建模版,主要用于创建基于CometD、Spring、Dojo以及Jetty 7的应用。这个压缩包的核心是帮助开发者快速搭建一个实时Web应用,...

    Dojo-2:用于 MCShockwave 的 Dojo 2 插件

    - **网络通信**:如果游戏需要多人在线交互,Dojo 2的HTTP和WebSocket支持可以用来处理客户端和服务器之间的数据交换。 - **游戏逻辑**:通过Dojo 2的异步操作和定时器功能,实现游戏循环和逻辑处理。 - **数据...

    node-socket-dojo

    1. Socket.IO概述:Socket.IO是一个为实时应用设计的JavaScript库,它支持多种传输协议,包括WebSocket、HTTP长轮询等,以确保在各种网络环境下都能实现双向实时通信。 2. 实时性与可靠性:Socket.IO通过心跳检测和...

    coding-dojo-group-chat

    【编码dojo组聊天】是一个基于Node.js和Socket.IO构建的实时在线群聊应用程序。这个项目旨在提供一个互动的平台,让编程爱好者们可以一起练习、讨论和分享编码技巧,类似于编程界的道场或训练场。它利用了JavaScript...

    dwr应用

    7. **DWR与其他技术的集成**:DWR可以与AJAX、jQuery、Dojo等前端框架良好配合,也可以与Spring、Hibernate等后端框架集成,实现更复杂的业务逻辑。 8. **DWR的最新版本和社区支持**:随着技术的发展,DWR也有新...

    java开源包1

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Struts2 开发者文档 api

    12. ** strut2-dojo-plugin**:提供与Dojo JavaScript库的集成,增强Web应用的用户体验。 13. ** strut2-spring-plugin**:与Spring框架集成,方便管理Action和Service等组件。 14. ** strut2-rest-plugin**:支持...

    ajax in action中文版(第五部分,共五部分,后面的不要积分,下载后都解压到一个包内,就可以了)

    6. **高级Ajax技术**:可能涉及到Comet(长轮询或流式传输)和WebSocket等双向通信技术,这些技术为实时Web应用提供了可能。 7. **用户体验**:讨论了如何利用Ajax提升用户体验,如平滑过渡效果、进度指示器和离线...

    cometd-3.0.0.beta2-distribution.tar.gz

    CometD是一个开源的、基于Java的WebSocket和Bayeux协议的实时Web应用程序框架。它提供了服务器推送技术,使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。CometD的核心理念是通过长连接来实现双向...

    cometd 框架实现的几个小程序

    在实现这些功能时,前端通常会使用JavaScript库(如jQuery或Dojo),通过CometD JavaScript API进行订阅和发布操作。后端则使用Java编写CometD服务端代码,处理订阅、发布以及业务逻辑。Jetty服务器作为CometD的运行...

    IBM的AJAX教程

    同时,随着HTML5的发展,WebSocket和SSE在现代Web应用中越来越重要,因此理解它们的工作原理和使用场景也非常重要。 总之,IBM的AJAX教程是一份全面的学习资源,涵盖了从基础到进阶的AJAX技术,对于希望提升Web应用...

    Ajax 探密 (Ajax Hacks )

    18. **Ajax与WebSocket**:WebSocket提供了双向通信,适用于实时应用,如在线游戏和实时股票报价。 19. **响应式设计**:Ajax可与媒体查询结合,为不同设备提供适配的用户体验。 20. **服务端渲染与客户端渲染**:...

    Ajax Hacks

    5. **Ajax库和框架**:介绍jQuery、Prototype、Dojo等流行Ajax库,以及它们如何简化Ajax请求的实现。 6. **局部刷新**:探讨如何使用Ajax更新页面的部分内容,以提供平滑的用户体验。 7. **错误处理和调试**:讲解...

    Professional_Ajax

    《Professional_Ajax》这本书不仅涵盖了Ajax的基础知识,还可能包含了一些高级话题,如Comet和WebSocket等持久连接技术,以及最新的Web发展动态,帮助读者保持对行业的洞察力。 通过阅读书中的`Professional_Ajax....

    ajax介绍文档

    此外,还有更高级的框架如YUI(Yahoo User Interface)、ExtJS、Dojo和DWR,它们不仅提供了AJAX功能,还包含了丰富的UI组件和动画效果,大大提高了Web应用的开发效率和用户体验。 #### 实现案例与作业 在给定的...

Global site tag (gtag.js) - Google Analytics