PHP+MySQL聊天室技術淺談

日期:2008-06-17  作者:喜騰小二  來源:PHPChina


    近來,在PHPChina推出了PHP聊天室技術的專題,恰好本人最近也在做這個項目,也在此發表一下個人的觀點。

    聊天室主要功能:
        1,注冊,登陸,結束,資料修改。
        2,使用者申請建立聊天室,自訂聊天室內容。
        3,顯示聊天室名稱,描述,主持人,公告,廣告。
        4,即時顯示線上使用者清單,可以檢視線上使用者資料(昵稱,email,ip,線上時長等)。
        5,發表聊天內容,字型內容,動作,表情,常用片語。
        6,允許隱身,私聊,滾屏,屏蔽使用者,清屏,聊天場景選擇,背景音樂,發送方式自訂。
        7,管理員有權對成員進行管理(踢出,禁止發言,移交管理授權權)。


  注意事項:
        1,禁忌使用框架結構(iframe除了減輕您的勞動量外,並不能帶來任何好處)
        2,前臺和後臺程式碼徹底分開,隻透過ajax通道傳送資料,而且隻應該傳送必要的資料。(前臺顯示資料,後臺處理資料)
        3,禁忌因程式引起的整個页面重新整理,隻更新需要變更的內容(禁忌使用header,meta重新整理页面)。
        4,在提交聊天內容時,不能一味追求使用者體驗的速度,而略過了實際的聊天記錄提交次序。(即是說,提交的聊天記錄應該在伺服器重組實際的先後次序,再傳送到用戶端,因為可能在同一時間有很多人提交資訊)


   使用到的技術:
        1,前後臺的橋樑——AJAX。可以選用jquery,XAJAX。本人傾嚮於jquery,速度快,簡單耐用,有很多外掛程式,更新的也快。
        2,資料載體的形式——XML。其實一般的聊天室資料也不是很復雜,用json完全夠了。
        3,資料庫抽象層——ADODB。用PDO更快一些。個人已經習慣使用ADODB。
        4,資料底層存儲介質——MySQL。這個沒有疑問。
        5,資料中間存儲介質——memcache。將高速讀寫的資料存儲到memcache共用記憶體裡麵,減輕資料庫的負荷。
        6,如果要實現視訊和語音,需要服務端FMS(flash media server)的支援,用戶端需要安裝flash player。並且涉及到在html,javascript,flash與後臺相互之間的資料互動。這方麵資料不是很多。


    這些是最核心的技術,在實際的應用開發中,還有許多細節問題需要解決。

    比如:怎麼處理線上清單的更新?
            途徑有這麼兩種:
                1,重新整理整個清單(無論是否有更新)。
                2,新增新上線成員,移除掉線成員,變更資料有變動的成員。
           顯然第二種是最佳的選擇。

            怎麼處理XmlHttpRequest併發的問題?
               javascript是單執行緒的,如果同時有兩個XmlHttpRequest物件,則很容易產生問題,這就需要我們控制XmlHttpRequest的生成與結束。
               在聊天室裡麵,我們需要更新的資料主要有:線上清單(包括成員資料的更新),聊天記錄,聊天室內容等。而這幾項更新的頻率又是不一緻的(如果時間一緻的話,隻需要建立一個XmlHttpRequest就可以處理掉)。聊天記錄需要較短的時間內更新,線上清單可以稍長時間更新。在不使用框架的前提下,如果分別建立XmlHttpRequest物件,很可能出現併發的問題。這就需要建立一個時間與流程的控制函式。
               setInterval('process_control()',3000) //三秒鐘調用一次
               函式process_control裡麵實現工作的調度,如:間隔一定時間執行謀工作,當謀工作完成之後才執行下一個工作。

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计