在 Ajax 应用程序中实现实时数据推送:学习使用基于套接字的 RIA 技术
2009-11-14 00:00:00 来源:WEB开发网
清单 6. 定义 XMLSocket 类<class name="ClientSocket" extends="node">
<attribute name="host" />
<attribute name="port" />
<XMLSocket name='xml_socket'/>
<handler name="oninit">
// connect the socket here:
xml_socket.connect(host,port);
</handler>
<handler name='onData' reference='xml_socket' args='messageXML'>
<![CDATA[
ExternalInterface.call(‘handleServerMessageReceived',messageXML);
]]>
</method>
</class>
(为简短起见,忽略了其他处理方法。在本文的 下载 部分中可获得完整的代码清单。)
就是这样,创建一个套接字对象并连接此对象就是这样轻松。这一代码清单创建了一个名为 ClientSocket 的新类,随后声明了一个名为 “xml_socket” 的 XML 套接字对象。只要此套接字对象读取到来自服务器的数据,就会触发 onData 事件,该事件将由为 onData 定义的处理方法处理。最后,在 onData 处理方法中,调用 Ajax 应用程序中的外部 JavaScript 函数。此后的流程与 Flex 客户端相同。
要创建 ClientSocket 对象,只需声明它即可:
清单 7. 声明 ClientSocket<canvas>
<ClientSocket id='serverPushSocket' host='localhost' port='20340'/>
</canvas>
为 ClientSocket 触发了 init 事件时,将尝试连接指定主机和端口的后端。(请参见清单 6 中的 oninit 处理方法。)
结束语
这篇文章讨论了几种模拟服务器推送的方法,从纯轮询到实时服务器推送,文中说明了每种方法的优缺点。最后,我重点关注了能够提供最优服务器可伸缩性和实时服务器推送行为的方法。
服务器推送并非适用于每一个应用程序。实际上,大多数应用程序都非常适合普通的请求/响应场景。其他一些应用程序使用轮询和类似的技术足以满足需求。只有那些服务器更新极为重要、客户端需要得到即时通知的重量级应用程序才需要本文所述技术。有必要再次强调,这种技术有两个主要的缺点:
如果数据需要通过 HTTPS 传输,客户端套接字无法利用 SSL 加密工具。
防火墙需要允许客户端套接字通过非标准端口(非 80 端口)连接到服务器。
然而,市面上存在着大量开源库,您可利用它们轻松编写自定义的加密例程。类似地,配置防火墙也是轻而易举的,实际上,只需付出很少的代价,即可获得强大的实时服务器推送功能。
本文示例源代码或素材下载
更多精彩
赞助商链接