基于javascript、ajax、memcache和PHP實(shí)現(xiàn)的簡易在線聊天室
在線聊天室(online chatrooms)是一個(gè)共多人進(jìn)行溝通交流的網(wǎng)絡(luò)平臺(tái),隨著越來越多的新技術(shù)的發(fā)明和成熟運(yùn)用,在線聊天室也出現(xiàn)使用各種不同技術(shù)的, 這篇文章我想簡單總結(jié)一下。
首先說一下前臺(tái)技術(shù),最新的當(dāng)然是基于HTML5的websocket,它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn) RFC 6455,WebSocketAPI被W3C定為標(biāo)準(zhǔn)。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。但是由于Websocket是HTML5的API,很多瀏覽器都還得不到支持,所以這種方式現(xiàn)在應(yīng)用不是特別多。第二種是ajax,它是采用一種輪詢的方式,每隔一段時(shí)間,去服務(wù)器上下載數(shù)據(jù),查看是否更新,它的優(yōu)點(diǎn)是異步請求處理(也可以設(shè)置同步),不會(huì)阻塞用戶其它操作,缺點(diǎn)是不間斷的輪詢不僅占用消耗帶寬,也占用過多的終端和服務(wù)器資源,而且由于ajax輪詢有時(shí)間間隔,所以獲得的消息不是實(shí)時(shí)的,因?yàn)椴皇窍⒂|發(fā),ajax的效率幾乎是最低的。第三種是基于服務(wù)器的推送技術(shù)(comet),說是推送,其實(shí)是偽推送,原理是在終端和服務(wù)器之間建立一條長連接,前臺(tái)通過判定這條長連接的內(nèi)容是否改變而獲取內(nèi)容,它的優(yōu)點(diǎn)是占用資源較少,實(shí)時(shí)性好,確實(shí)是需要服務(wù)器特別的支持,而且長時(shí)間占用連接?,F(xiàn)在越來越多的服務(wù)都采用了這種技術(shù)。
再來說下后臺(tái),聊天室屬于高IO的應(yīng)用,數(shù)據(jù)庫方面可能是最大瓶頸,聊天的特點(diǎn)是短文本較多,類似于微博。而且它屬于多用戶系統(tǒng),當(dāng)用戶達(dá)到一個(gè)數(shù)量級(jí)時(shí),如果采用Mysql等關(guān)系型數(shù)據(jù)庫的話,查詢的壓力應(yīng)該是很大的。如果沒有特殊的要求,個(gè)人認(rèn)為,聊天記錄不需要永久存儲(chǔ),這時(shí)候memcache,redis等基于內(nèi)存的存儲(chǔ)系統(tǒng)就能發(fā)揮作用了。下面是我開發(fā)的一個(gè)簡單的基于ajax+php+memcache的在線聊天室。
在這個(gè)聊天室中,所有聊天記錄都存放在memcache中,用cid存儲(chǔ)聊天記錄的最大id,用msgcid存放聊天記錄,每插入一條記錄,cid自增1。前臺(tái)通過ajax獲取獲取json格式數(shù)據(jù),由于memcache是基于內(nèi)存的特性,整體系統(tǒng)運(yùn)行速度是非常快的。下面是系統(tǒng)的源碼,整個(gè)系統(tǒng)只有兩個(gè)文件,合起來不到10KB。

https://github.com/hitoy/online-chatroom
系統(tǒng)需求:
1,安裝有memcache
2,php安裝memcache擴(kuò)展
3,支持Javascript和ajax的現(xiàn)代瀏覽器
- PHP框架實(shí)現(xiàn)WebSocket在線聊天通訊系統(tǒng)
- ThinkPHP5.0框架結(jié)合Swoole開發(fā)實(shí)現(xiàn)WebSocket在線聊天案例詳解
- Ajax PHP JavaScript MySQL實(shí)現(xiàn)簡易無刷新在線聊天室
- PHP+swoole實(shí)現(xiàn)簡單多人在線聊天群發(fā)
- PHP聊天室簡單實(shí)現(xiàn)方法詳解
- 基于Swoole實(shí)現(xiàn)PHP與websocket聊天室
- 值得分享的php+ajax實(shí)時(shí)聊天室
- 簡單的php+mysql聊天室實(shí)現(xiàn)方法(附源碼)
- php實(shí)現(xiàn)簡易聊天室應(yīng)用代碼
- php+html5基于websocket實(shí)現(xiàn)聊天室的方法
- 基于PHP實(shí)現(xiàn)一個(gè)簡單的在線聊天功能
相關(guān)文章
Javascript動(dòng)態(tài)創(chuàng)建div的方法
這篇文章主要介紹了Javascript動(dòng)態(tài)創(chuàng)建div的方法,是javascript節(jié)點(diǎn)操作的典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
使用swiper自定義分頁點(diǎn)擊跳轉(zhuǎn)指定頁面
這篇文章主要介紹了使用swiper自定義分頁點(diǎn)擊跳轉(zhuǎn)指定頁面方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
微信小程序跳轉(zhuǎn)外部鏈接的詳細(xì)實(shí)現(xiàn)方法
寫這個(gè)是因?yàn)樽罱〕绦虻囊粋€(gè)需求需要從小程序跳轉(zhuǎn)到客戶的官網(wǎng),或者其他外部報(bào)名鏈接,下面這篇文章主要給大家介紹了關(guān)于微信小程序跳轉(zhuǎn)外部鏈接的詳細(xì)實(shí)現(xiàn)方法,需要的朋友可以參考下2022-10-10
微信小程序表單驗(yàn)證插件WxValidate的二次封裝功能(終極版)
這篇文章主要介紹了微信小程序表單驗(yàn)證插件WxValidate的二次封裝功能(終極版),文中給大家提到了最終版與前面2版的不同點(diǎn),需要的朋友可以參考下2019-09-09
JScript中使用ADODB.Stream判斷文件編碼的代碼
在實(shí)現(xiàn)TextStraem的時(shí)候,找到判斷文件編碼的代碼是VBS的,但是在JScript中是沒有ASC等函數(shù)的,也不能對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行處理,因此需要通過一個(gè)特別的方法來獲取文件開關(guān)的編碼標(biāo)識(shí)。2008-06-06

