前段时间,用AJAX+VML写了一个Web在线会议平台,觉得挺有意思的,现在把它拿上来与大家分享 ^_^
这是一个类似于NetMeeting的在线会议平台,但特别之处在于,WebMeeting不需要安装额外的软件,只要有IE就能使用,这样一来,使用者只要能够上网,就能进行在线会议。
WebMeeting还只是一个概念,目前只有电子白板和即时消息发送的功能。WebMeeting的界面是仿flickr风格的,所以非常简洁。如下图所示:
WebMeeting的界面
功能介绍:
电子白板:可多人同时进行白板操作,且每个人都可以看到操作过程。
在线交流:可进行简单的消息发送。
使用方法:
使用者只要在浏览器中输入WebMeeting所在的WEB服务器地址,就能进行Web在线会议了,多人可同时使用白板绘制图形,发送文本消息,而这些动作都将会反映在每个使用者的屏幕上,如下图所示:
用户A 用户B
WebMeeting的工作原理:
WebMeeting是用AJAX+VML实现的,VML是作为表示层用来进行白板的绘制,故WebMeeting目前只能在IE上运行,而用户操作的反馈则是通过AJAX进行传递的。
系统运行流程图
通常情况下,使用AJAX可实现浏览器端与服务器端的异步通信,特别是有了AjaxPro.NET后,更可以非常方便的以同步或异步的方式去调用服务器端的方法,但由于WebMeeting即需要从浏览器端异步调用服务器端方法来完成动作的反馈(即浏览器端把用户的动作发送到服务器),且服务器又需要完成用户动作的分发(即服务器接收到用户的反馈后把动作分发到各浏览器端),也就是说,需要双向的AJAX调用:浏览器端调用服务器端的函数以及服务器端调用浏览器端的函数。
要从浏览器端调用服务器端的方法,AjaxPro.NET可很好的应付,可以利用JavaScript轻松的调用服务器端方法,但是反过来,若想从服务器端调用浏览器端的方法的话,就不是那么容易了,因为AjaxPro.NET并没有提供这个功能。
从本质上讲,B/S结构的应用程序天生就是无状态的,所以就没有办法从服务器端直接调用浏览器端的方法,因为所有请求都是单方向的,只能从浏览器端向服务器发出请求。
为了使服务器调用浏览器端方法成为可能,可以采用控制反转的方法,可按照如下步骤进行:
a) 当从服务器端调用浏览器端方法时,并不真正的去调用浏览器端方法,而是把调用信息暂时保存在服务器端的“调用信息”队列中。
b) 在浏览器端安排一个“查询进程”,让它每隔一段时间调用服务器端的“调用查询”函数,该函数会从服务器端的“调用信息”队列中提取出一条调用信息,然后作为返回值返回给浏览器端的“查询进程”。
c) 浏览器端“查询进程”分析服务器端返回的查询结果,然后代理服务器端调用,最后把浏览器端方法执行的结果传回给服务器端“调用进程”。
这样一来,就可以非常方便的从服务器端调用浏览器端的方法,就像下面这样:
// Page 为浏览器端方法调用器的启动页面
ClientSideMethodCaller caller = new ClientSideMethodCaller(Page);
// clientMethodName: 浏览器端方法名
// param1,param2,……… 调用参数
// returnValueReader 返回值阅读器
caller.Call(“clientMethodName”, param1, param2, ………, returnValueReader);
以上就是对WebMeeting的完整介绍,可能有点长,但希望能给想写这类应用的朋友带来一些灵感。
另附上WebMeeting的源代码及说明文档:
WebMeeting下载
WebMeeting说明文档