av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

PHP聊天室技術(shù)(1)

瀏覽:19日期:2024-01-19 09:05:14

PHP聊天室技術(shù) 黃國輝

1.前言 上網(wǎng)聊天是時下最流行的交友方式。各大網(wǎng)站推出的聊天室都各具特色。 聊天室主要分為WebChat、BBSChat兩種。BBSChat是基于Telnet的Tcp協(xié)議,是BBS的附設(shè)功能,需要客戶端Telnet程式。WebChat則采用瀏覽器方式,實際上是個多人一起使用的CGI程式。其基本原理是把每個用戶的發(fā)言通過瀏覽器傳給系統(tǒng),再由系統(tǒng)收集處理后分發(fā)給特定用戶。 WebChat一般采用Server Push或Client Pull技術(shù)。兩種技術(shù)的區(qū)別在于使用不同的方式將數(shù)據(jù)分發(fā)給用戶,Server Push是由服務(wù)器將數(shù)據(jù)以多重MIME編碼,推給(push)使用者端,現(xiàn)在較少網(wǎng)站使用這種方式。Client Pull則是用戶從服務(wù)器拉(pull)所要的數(shù)據(jù)。 最常用的Client Pull就是利用Html語言的Meta標簽http-equiv='Refresh' 的屬性,每隔一段時間就檢查服務(wù)器上是否有新的數(shù)據(jù)。例如 ,每隔5秒鐘就會刷新一次頁面。這種方法簡單有效,缺點是刷新時會產(chǎn)生閃爍的現(xiàn)象;而且為了保持效率,每次刷新都會把舊的聊天內(nèi)容清除,用戶想查看或保留對話內(nèi)容都很不方便。為此,采用JavaApplet作為聊天室的前端,利用刷新把從服務(wù)器Pull的數(shù)據(jù)通過JavaApplet來顯示也是一種解決方案。更有就是本文要介紹的使聊天程式保持連線的方案。方法一,把聊天程式配置為無限大,就能使瀏覽器不停地保持下載的連線狀態(tài);方法二,聊天程式中存在著無限循環(huán),因為能夠方便地配置更高級的功能,所以在此選擇采用。 Web服務(wù)器采用FreeBSD+Apache,原因是兩者的組合具備最強的性能,而且花費為零。還需要考慮的是用什么方式來存放數(shù)據(jù)呢。用文檔相對而言容易實現(xiàn),但是多人使用,頻繁地對同一文檔進行IO操作,難免會影響效率,況且FreeBSD的IO性能不佳。能夠考慮使用RamDisk,將文檔整個放進內(nèi)存,以提高速度。或在內(nèi)存中劃分出一塊高速空間用以數(shù)據(jù)存放。筆者使用的是數(shù)據(jù)庫方式:MySQL。因為該數(shù)據(jù)庫就是為大批量用戶同時使用而設(shè)計,利用他能夠省去設(shè)計高速空間操作的復雜編寫,速度也可得到確保。如將整個數(shù)據(jù)庫放進內(nèi)存,效果更好。 程式用PHP+Html+JavaScript編寫。聊天室主要是對Html的Form中的各種元素進行操作。JavaScript是基于對象的語言,對Html中的各種元素皆當作對象看待,所以每個元素的方法和屬性都很豐富,操作比較方便。而PHP只有在Form經(jīng)過Post后,將Form中的元素轉(zhuǎn)成對應(yīng)的變量,才能處理用戶輸入的數(shù)據(jù)。從交互性來說比較差,這也是使用JavaScript的原因。采用PHP的原因是因為比起其他CGI語言,其速度和安全性都較佳,研發(fā)也比較容易。

2. 不斷刷新的聊天室 一個標準的聊天室頁面由三個Frame組成,分別是顯示在線用戶的Online、用戶發(fā)言及功能配置的Say和顯示聊天內(nèi)容的List。用戶在Say Frame中敲入發(fā)言內(nèi)容后按發(fā)送,數(shù)據(jù)經(jīng)過處理后保存在Mysql數(shù)據(jù)庫,同時被保存的還包括發(fā)言人、聊天對象及發(fā)言的時間。用戶一進入聊天室,List Frame從Mysql數(shù)據(jù)庫中把發(fā)言時間大于用戶進入時間的發(fā)言提出顯示出來。而后續(xù)顯示新的發(fā)言內(nèi)容的關(guān)鍵,在于顯示聊天內(nèi)容的那段程式是無限循環(huán)的。 List Frame程式概要: $db=mysql_pconnect(localhost,root);;#Mysql數(shù)據(jù)庫連接 mysql_select_db(chat,$db); 顯示歡迎進入聊天室 配置$init為數(shù)據(jù)庫中發(fā)言時間比 進入時間大的第一個數(shù)據(jù)的ID號#是數(shù)據(jù)提取的標志位 while (1==1) {;;#無限循環(huán)開始 提取從$init到最后的數(shù)據(jù); while (每一個數(shù)據(jù)$text) { $emote=strip_tags($text) #防止用戶直接輸入Html語言 if (eregi('^/',$emote)) #判斷發(fā)言是否系統(tǒng)命令(以/開頭) 系統(tǒng)特別處理 else 顯示發(fā)言 } 配置$init為最后數(shù)據(jù)的ID號 flush();;;;;#清出輸出緩沖,使發(fā)言馬上顯示 sleep(2);;;;;#使程式暫停2秒,節(jié)省系統(tǒng)資源 mysql_free_result($result);;;;;#釋放數(shù)據(jù)庫結(jié)果占用的內(nèi)存 } 因為程式無限循環(huán),在每次循環(huán)中輸出的發(fā)言是先置入輸出緩沖區(qū)內(nèi)。通過flush()馬上把緩沖區(qū)的內(nèi)容向用戶的List Frame送出,達到了實時的聊天效果。循環(huán)最后要釋放Mysql結(jié)果集占用的內(nèi)存,否則因為無限循環(huán)的緣故,系統(tǒng)資源很快會被耗盡。 用戶在Login后將建立一個Online的表用于在線用戶的統(tǒng)計,主要是為了防止User表過大,程式中頻繁用到的檢索會拖慢系統(tǒng)的運作。這其中用的最多的是Online Frame,在采用Client Pull的Refresh Meta,每隔一段時間就會查詢Online表,以刷新在線的用戶。假如用戶不發(fā)言超過規(guī)定時間,系統(tǒng)會調(diào)用自定義函數(shù)將用戶設(shè)為TimeOut,強制將其退出聊天室。

標簽: PHP
主站蜘蛛池模板: 国产一区二区自拍 | 99精品久久久 | 免费在线观看毛片 | 精品小视频 | 中文日韩在线 | 欧美人xxxx| 欧美一区二区三区不卡 | 天天撸夜夜操 | 国产精品二 | 精品久久久久久久久久久久久久 | av毛片在线看 | 黄色a一级 | 国产精品成人一区二区网站软件 | 久久不雅视频 | 日韩不卡在线 | 99超碰在线观看 | 欧美一区二区三区在线播放 | 国产人成一区二区三区影院 | 久久精品99久久久久久 | 色婷婷视频在线观看 | 黄色片免费 | 国产午夜免费视频 | 国产精品嫩草影院桃色 | 中文字幕一区二区三区在线观看 | 亚洲精品久久 | 少妇高潮毛片 | 亚洲 欧美 激情 另类 校园 | 天天操夜夜爽 | 天天操狠狠操 | 黄色片视频在线观看 | 国产乱人伦 | 在线观看免费黄色 | 艳妇乳肉亭妇荡乳av | 国产综合视频 | 视频一区中文字幕 | 日本特黄视频 | 日韩精品一区二区视频 | 成人国产精品免费观看 | 日韩一区二区在线视频 | 欧美成人精品一区二区三区在线看 | 日韩精品一区二区在线 |