用AJAX+J2EE實現一個網上會議室系統

來源:互聯網
上載者:User
ajax|j2ee|網上會議

   今年大家都在炒作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代碼產生工具引擎產生即可。會議室管理的用戶端是傳統的Java Web技術,因此沒有什麼要考慮的。
  用戶端的第二個部分也即會議系統的主要部分,該部分主要有兩個介面,第一個頁面是會議室進入的選擇頁面。也即把已經啟動的會議室列出來,使用者選擇一個會議室進入,這個頁面也是使用傳統的Java Web技術。第二個頁面是進入會議室後的主介面,這個介面是整個會議系統的主要介面,所有參與會議的操作都在這裡啟動並執行。這個介面需要不斷的與伺服器端互動傳輸資料,傳輸的內容包括使用者的發言、其它人給使用者的發言、會議室的狀態等。有的傳輸資訊需要即時響應(如使用者發言),有的資訊可以設定成定時響應(如會議室狀態)。
  Java Web程式中與伺服器端互動資料主要有兩種方式,一種是直接重新整理頁面,另外一種是使用Socket直接跟Web伺服器連接埠通訊。由於Socket編程相對複雜,我們選擇第一種直接重新整理頁面的方式,這種方式又可以分為幾種,包括傳統的Form提交,傳統的自動重新整理網頁取得資料以及使用ActiveXObject對象(如xmlhttp)直接與伺服器互動資料,也即AJAX方式。由於使用AJAX方式使用者感覺不到頁面在重新整理,表現起來好於手動或自動重新整理頁面的方式,因此我們決定選擇AJAX方式實現用戶端與伺服器端進行資料互動。
  使用者發言的時候,直接使用xmlhttp對象Post資料到伺服器。為了能不斷接收到別人的發言資訊,需要定時不斷的從伺服器端讀取資料,因此,需要在用戶端啟動一個定時器,每隔一定的時候自動使用xmlhttp對象到伺服器端下載別人的發言資訊,並顯示到會議室資訊主介面中。另外還要定時重新整理參會的人數、會議室當前發言人、會議室的公告等會議狀態資訊,這也可以通過從用戶端啟動一個定時器,通過xmlhttp對象與伺服器互動得到。
  另外還有一些操作,鎖定會議室、踢人、指定發言人的發言時間、給會議室加密碼等功能,也通過xmlhttp的方式與伺服器傳輸命令實現。

五、核心代碼說明

1、伺服器端核心代碼
  在EasyJF開源團隊的會議系統中,由於是以EasyJF官網的論壇系統、後台管理等是整合一起的。伺服器ChatService與ChatRoom共同合并到了一個ChatService.java類中,實現會議室管理及會議服務功能。ChatService類的部分主要代碼如下:
package com.easyjf.chat.business;
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;//當前發言人
private String cid;//會議室id
private String title;//會議室主題
private String intro;//會議室簡介
private String owner;//會議室建立人
private int maxUser;//最大線上人數
private int interval;//最大重新整理時間間隔
private String vrtype;//存取權限
private String vrvalue;//訪問值
private String announce;
private String password;//房間進入密碼
private int status;//會議室狀態
private String filePath;
//private Thread thread;
private boolean isStop=false;
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分鐘以前的資訊
}
/**
* 停止所有會議室
*
*/
public static void clear()
{
if(!service.isEmpty())
{
Iterator it=service.values().iterator();
while(it.hasNext())
{
ChatService chat=(ChatService)it.next();
chat.stop();
}
}
service.clear();
}
/**
* 建立一個會議室
* @param name 會議室ID
* @return
*/
public static ChatService create(String name)
{
ChatService ret=null;
if(service.containsKey(name))
{
ChatService s=(ChatService)service.get(name);
s.stop();
service.remove(name);
}
if(service.size(){
ret=new ChatService();
service.put(name,ret);
}
return ret;
}

[1] [2]  下一頁



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.