| 導購 | 订阅 | 在线投稿
分享
 
 
 

PHP+MySQL聊天室技術淺談

2008-12-22 08:10:32  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  近來,在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裏面實現任務的調度,如:間隔一定時間執行謀任務,當謀任務完成之後才執行下一個任務。
 
近來,在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裏面實現任務的調度,如:間隔一定時間執行謀任務,當謀任務完成之後才執行下一個任務。
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
  免責聲明:本文僅代表作者個人觀點,與王朝網絡無關。王朝網絡登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
© 2005- 王朝網路 版權所有