国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > AJAX > 正文

利用Ajax實(shí)現(xiàn)長(zhǎng)連接(模擬推送)

2024-09-01 08:26:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 

      很多程序都可以通過(guò)socket來(lái)實(shí)現(xiàn)長(zhǎng)連接,實(shí)現(xiàn)消息的即時(shí)推送。但由于http請(qǐng)求一般都是短連接,一次請(qǐng)求結(jié)束,就會(huì)斷開(kāi)與服務(wù)器的連接,服務(wù)器不能主動(dòng)推送數(shù)據(jù)到客戶端,而只能由客戶端發(fā)起請(qǐng)求,但有些時(shí)候,需要在web上實(shí)現(xiàn)即時(shí)的消息傳輸,比如即時(shí)聊天、股票動(dòng)態(tài)信息等。
    在Ajax技術(shù)被發(fā)掘以前,在網(wǎng)頁(yè)上實(shí)現(xiàn)無(wú)刷新的即時(shí)聊天,似乎是很困難的事情,但由于Ajax技術(shù)的興起,人們可以進(jìn)一步來(lái)挖掘它的潛力了,象gmail、google gtalk的網(wǎng)頁(yè)版,都是Ajax長(zhǎng)連接的重要應(yīng)用,目前很多網(wǎng)站可能都已經(jīng)在使用長(zhǎng)連接技術(shù)了,比如SNS網(wǎng)站的即時(shí)聊天。

1.Ajax短連接方式實(shí)現(xiàn)網(wǎng)頁(yè)聊天

自己畫了一個(gè)模型圖:

 

     常規(guī)的短連接模式下,都是通過(guò)不間斷刷新請(qǐng)求實(shí)現(xiàn)的,比如每間隔3秒發(fā)送一次Ajax請(qǐng)求,3秒更新一下數(shù)據(jù),然后就這樣不間斷刷新下去,直到用戶關(guān)閉網(wǎng)頁(yè)。這樣所帶來(lái)的弊端就是,如果用戶很長(zhǎng)時(shí)間都沒(méi)有操作,每次刷新都不會(huì)返回新數(shù)據(jù),這樣就造成了資源的浪費(fèi),很多請(qǐng)求都是沒(méi)必要的;另外一個(gè)問(wèn)題,就是用戶的輸入,跟數(shù)據(jù)的請(qǐng)求不是同步的,會(huì)造成一定的信息延遲。

2.Ajax長(zhǎng)連接方式實(shí)現(xiàn)網(wǎng)頁(yè)聊天

模型圖:

 

      Ajax長(zhǎng)連接模式,它的刷新是根據(jù)數(shù)據(jù)來(lái)執(zhí)行的,如果有新數(shù)據(jù)返回,接收并解析顯示數(shù)據(jù),然后發(fā)起新的Ajax請(qǐng)求,如果一段時(shí)間內(nèi),用戶沒(méi)有操作,則連接處于睡眠狀態(tài),一直等待有用戶輸入或者請(qǐng)求超時(shí),然后發(fā)起下個(gè)Ajax請(qǐng)求。這樣做的好處是,每個(gè)消息都會(huì)即時(shí)推送到客戶端,延遲極少;另外每次請(qǐng)求都是有意義的,與短連接對(duì)比,效率要高很多。但對(duì)于一個(gè)用戶量很多,并且操作非常頻繁的網(wǎng)站,長(zhǎng)連接模式也會(huì)出現(xiàn)過(guò)于頻繁的刷新問(wèn)題。目前IE對(duì)于HTTP連接數(shù)是有限制的,每個(gè)網(wǎng)頁(yè)只能同時(shí)進(jìn)行兩個(gè)長(zhǎng)連接,第三個(gè)長(zhǎng)連接會(huì)被阻塞。

利用php在后臺(tái)sleep,自己做了個(gè)模擬的程序,查看效果

      看了一下別人寫的Ajax長(zhǎng)連接聊天的案例,以php為例,基本上是在后臺(tái)進(jìn)行不間斷的檢測(cè),如果有新數(shù)據(jù)就推送,如果沒(méi)有新數(shù)據(jù),就一直阻塞,直到30秒超時(shí),然后客戶端重新發(fā)起下一個(gè)請(qǐng)求。后臺(tái)判斷里重要的一行代碼:usleep(10000); 就是暫停10毫秒,緩解一下CPU壓力,個(gè)人感覺(jué)如果暫停100毫秒,時(shí)間延遲也是很難感覺(jué)到的。這種方法基本就是把前端的循環(huán),搬到了后臺(tái),中間減少了網(wǎng)絡(luò)傳輸?shù)沫h(huán)節(jié),如果是一個(gè)Ajax的即時(shí)聊天系統(tǒng),要保存用戶的聊天記錄,那就需要跟數(shù)據(jù)庫(kù)相結(jié)合,每秒10次以上的數(shù)據(jù)查詢,這個(gè)與短連接比,必定加大了數(shù)據(jù)庫(kù)的壓力,具體怎么優(yōu)化,這個(gè)應(yīng)該是交給服務(wù)器端人員來(lái)處理了。

如果想要了解更多的內(nèi)容請(qǐng)Google一下comet,或者看看這里(一個(gè)很不錯(cuò)的框架,Ajax Push Engine),這個(gè)網(wǎng)站有很多demo,效果很帥。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸溪县| 马龙县| 仪陇县| 焉耆| 土默特左旗| 屏东县| 浦城县| 东台市| 夏河县| 廉江市| 安康市| 涟水县| 隆昌县| 侯马市| 佛山市| 井研县| 确山县| 西安市| 阿合奇县| 南投市| 隆尧县| 盘山县| 文安县| 裕民县| 武鸣县| 长宁区| 藁城市| 荔浦县| 海淀区| 樟树市| 若羌县| 遂平县| 德阳市| 如皋市| 公安县| 慈利县| 信阳市| 桂平市| 东阳市| 潞西市| 安福县|