从理论上来说,多比图形不关心如何取得数据,只是取得数据后如何展现。 但是很多客户都是从VB/VC/Delphi转过来的, 所以他们对B/S的应用是如何和客户端通信的并不了解。这里简单介绍一下。
B/S结构的通讯方式一般有三种,基于AJAX的异步通讯模式,基于HTTP长连接的COMMET模式,以及Flash XMLSocket,最新的Web socket技术也可以支持效率更高通讯模式, 但是需要IE9支持。
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
AJAX 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。 通过 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据。 AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。 AJAX 可使因特网应用程序更小、更快,更友好。iframe 是很早就存在的一种 HTML 标记, 通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。
关于这种技术,可以参看以下的链接。http://blog.csdn.net/fhp0917/article/details/4171818考虑到Flash播放器在我国安装的比率在95%以上,并且Flash播放器经过严格的安全测试, 使用 Flash 的 XMLSocket也是非常可行的方案。
这种方案实现的基础是:
1. Flash 提供了 XMLSocket 类。
2. JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。
具体实现方法:在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信。JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML页面的内容显示。
关于如何去构建充当了 JavaScript 与 Flash XMLSocket 桥梁的 Flash 程序,以及如何在 JavaScript 里调用 Flash 提供的接口,我们可以参考 AFLAX(Asynchronous Flash and XML)项目提供的 Socket Demo 以及 SocketJS。
Javascript 与 Flash 的紧密结合,极大增强了客户端的处理能力。从 Flash 播放器 V7.0.19 开始,已经取消了 XMLSocket的端口必须大于 1023 的限制。Linux 平台也支持 Flash XMLSocket 方案。但此方案的缺点在于:
1. 因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙;
2. 因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制;
如果你的应用只是部署在企业的内网中,不存在跨防火墙的问题,这种方案我们强烈推荐。