今年大家都在炒作Web2.0,其中的一門技術Ajax也是跟著火了起來,因此前面我寫了一篇名為《忽悠一下AJAX》的文章,簡單地分析了一下Ajax的技術的實質。雖然筆者不太喜歡跟風,但Ajax有一些地方還是比較有用的。前段時間做了EasyJF開源團隊的網上會議系統,就用到了Ajax技術,下面把設計思路發出來跟大家分享一下。
一、系統實現的功能
本會議室系統主要用於EasyJF開源團隊的成員網上會議使用,會議系統模擬傳統的會議形式,可以同時開設多個不同主題的會議室,每個會議室需要提供訪問權限控制功能,會議中能夠指定會議發言模式(分為排隊發言、自由發言兩種),系統能自動記錄每個會議室的發言信息,可以供參會人員長期查閱。
會議系統的用戶支持游客帳號參加會議,同時也提供跟其它用戶系統的接口,比如EasyJF官網中的開源論壇系統。
會議系統暫時使用文字聊天的方式,並提供語音及視頻的接口。
二、技術體系
服務器端使用Java語言,MVC使用EasyJWeb框架;
客戶端使用AJAX技術與服務器端交互數據;
會議歷史信息儲存格式使用文本格式,方便系統安裝運行,也便於管理。
三、會議室服務器端設計
會議室服務器端是整個會議系統的核心部分,服務器端程序設計的好壞影響到整個系統的質量。
首先,根據會議室要實現的功能進行抽象分析。一個會議室對象,應該包括會議主題、會議簡介、參會人數限制、公告、會議室類型、訪問權限設定、房間密碼、當前參會的人員、當前發言的人員、排隊等待發言的人員等參數信息。我們把他封裝一個Java對象當中。如下面的ChatRoom代碼所示:
public class ChatRoom{
private String cid;//主鍵
private String title;//會議室主題
private String intro;//會議室簡介
private String announce;//會議室公告
private String owner;//會議室創建人
private Integer maxUser;//最大在線人數
private Integer intervals;//最大刷新時間間隔
private String vrtype;//訪問權限
private String vrvalue;//訪問值
private Integer status;//會議室狀態
private Date inputTime;
}
需要一個管理會議室的類,與會議有關的操作(如啟動會議、關閉會議)等都直接找他。該類還應該即有自動定時檢測用戶在線情況(防止用戶意外退出)、把內存中的會議歷史發言信息保存到文本文件中等功能。這裡可以考慮使用一個ChatService類提供這些功能:
public class ChatService implements Runnable {
private static final Map service=new HashMap();//會議室服務,系統中的當前會議室存放到該表集合中
private static final int maxServices=10;//可以同時開的最大會議室數
private static final SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
private final List msgs;//會議發言信息Chat
private final List users;//在線用戶,ChatUser
private final List talkers;//排隊發言人數Talker
private final List manager;//會議室管理員
private Talker currentTalker;//當前發言人
public ChatService()
{
this.msgs=new ArrayList();
this.users=new ArrayList();
this.talkers=new ArrayList();
this.manager=new ArrayList();
this.maxUser=1000;//最大1000人同時
this.interval=1000*60*5;//5分鐘以前的信息
}
}
會議發言信息也需要封裝成一個類,表示發言人、接收人、內容、發言時間、類型等,大致如下面的Chat類:
public class Chat {
private String cid;
private String sender;
private String reciver;
private String content;
private Date vdate;
private Integer types;
private Integer status;
}
還有表示參加會議的人的信息,包括參會人名稱、IP地址、狀態等,如下面的ChatUser類所示:
public class ChatUser {
private String ip;
private String port;
private String userName;
private Date lastAccessTime;
private Integer status;
}
另外還需要一個表示當前發言人的Talker類,表示當前的發言人,發言開始時間,發言預計結束時間等。
在服務器端的設計中,會議室信息服務器應該能以多線程的方式運行,即啟動一個會議就新開一個線程,每個會議線程維護自己的會議狀態,如參會人、發言人,保存會議歷史發言信息以及清空內存中的數據等操作。
四、客戶端設計
會議室客戶端包括兩個部分,一個部分是會議室的管理界面,主要包會議室的“添刪改查”及“啟動”或“關閉”會議服務的操作。這部分我們直接使用EasyJWeb Tools中的添刪改查業務引擎AbstractCrudAction可以快速實現。界面也比較簡單,直接使用EasyJWeb Tools