top
Loading...
數據庫聊天室的“無刷新”技術要點

聊天室是網絡實時交互的最常應用之一。聊天室的制作要解決好以下問題。
1、誰在發言
2、講給誰聽
3、講些什么
與ICQ不同,ICQ 的數據流是一對一的關系。只要解決好上面三個問題就
可以實現。
聊天室由于存在一對多、多對一、一對一等多種數據關系,因此就有一個
數據的存放問題。
ASP 聊天室的數據存放一般有三種形式: 一是用全局變量Application 和
Session對象。這種形式速度快效果好,但系統資源消耗太大。二是應用讀
寫數據庫實現。這種方法簡明但服務器頻繁讀寫數據據庫很累。第三種可用
讀寫TXT文件完成。適合簡單的聊天室。
三種方法都有一個共性的特點:客戶端要獲取新的聊天數據,必需刷新
調用。刷新時間過短,屏幕晃動厲害,刷新時間過長,等待時間太多感速度
太慢。于是人們分別用觸發刷新與自動刷新結合從感覺上得到改善。二是利
用隱藏幀進行刷新再把內容加在顯示幀上,形成所謂“無刷新”聊天室,解
決了屏幕晃動問題。
“無刷新”聊天室要解決的技術問題有:
一、如何判斷新數據
二、新數據的提取
三、如何讓客戶斷在有新數據時能及時更新
以上一、二用Application很容易實現,但第三個問題不容易解決。用數據
庫做聊天室,第三個問題相對容易,但第一、二個問題要費點精神。筆者用
數據庫做的聊天室采用了“無刷新”技術,沒有用一個Application,主要
的技術要點是:
在數據庫中另設置只有一個字段的表,字段名:BS
用戶每次登陸讀一次BS 的值。 設一個Session別作為每一個具體用戶的
當前發言次數,初始為 BS-1。
用戶每發言一次使 BS + 1(Session 值不此時不加,形成Session與BS差)
在隱性刷新幀上判斷:
如果 BS 與 Session 有差,則讀數據庫將新數據讀出并在顯示幀顯示。
Session+1 表示新數據已經讀出,不再重讀。
反復此過程,直到所有新數據據讀出并顯示。此時 BS = Session
上述方法解決了上面講的 判斷新數據和新數據的提取的問題。由于新數據
本身沒有任何變化,依然原樣存放在數據庫中,客戶端無論時間差多大,只
要自身的Session與BS有差,一當讀庫,差多少多多少條記錄,解決了客戶端
刷新差異帶來的不顯示問題。
以上方法,當然也可以用Application來設置 BS。還有一但BS 到了一定值
時(看同時發言人數而定),要重置為 1 。
以上方法在 IIS 4 平臺,局域網、因特網通過。

南 風

北斗有巢氏 有巢氏北斗