前段时间,用AJAX+VML写了一个Web在线会议平台,觉得挺有意思的,现在把它拿上来与大家分享 ^_^

     这是一个类似于NetMeeting的在线会议平台,但特别之处在于,WebMeeting不需要安装额外的软件,只要有IE就能使用,这样一来,使用者只要能够上网,就能进行在线会议。

     WebMeeting还只是一个概念,目前只有电子白板和即时消息发送的功能。WebMeeting的界面是仿flickr风格的,所以非常简洁。如下图所示:

在线会议 开源项目 java 在线会议平台web_服务器


                                  WebMeeting的界面 

 

功能介绍:
     电子白板:可多人同时进行白板操作,且每个人都可以看到操作过程。
     在线交流:可进行简单的消息发送。

使用方法:
     使用者只要在浏览器中输入WebMeeting所在的WEB服务器地址,就能进行Web在线会议了,多人可同时使用白板绘制图形,发送文本消息,而这些动作都将会反映在每个使用者的屏幕上,如下图所示:

在线会议 开源项目 java 在线会议平台web_在线会议 开源项目 java_02


                  用户A                                                                       用户B

 
WebMeeting的工作原理:

     WebMeeting是用AJAX+VML实现的,VML是作为表示层用来进行白板的绘制,故WebMeeting目前只能在IE上运行,而用户操作的反馈则是通过AJAX进行传递的。

在线会议 开源项目 java 在线会议平台web_AJAX_03


                                                         系统运行流程图 

     通常情况下,使用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说明文档