comet 异步请求技术中相关关键字解释 (新手向)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
最近想在產(chǎn)品中加入即時(shí)通訊的功能.BS架構(gòu)的程序.實(shí)現(xiàn)方式不外乎兩大標(biāo)準(zhǔn)下的各種奇淫技巧.
這兩大標(biāo)準(zhǔn)就是 HTML5 HTML4
為啥這兩個(gè)呢..因?yàn)镠TML5里面有websocket.這個(gè)徹底顛覆http請(qǐng)求的東西,使得請(qǐng)求不再是無狀態(tài)的.
當(dāng)然websocket目前支持不是很好.也沒辦法.看著好東西沒法用.這是一種何種的煎熬....搞得我總是想在產(chǎn)品里面內(nèi)嵌chromeFrame.然后強(qiáng)制給客戶裝上.哈哈...當(dāng)然客戶沒準(zhǔn)會(huì)和我拼命呢...
沒辦法,在現(xiàn)有的需求中基本上,實(shí)現(xiàn)思路只有一個(gè)了.也就是第一個(gè)讓我頭疼了一陣的關(guān)鍵詞
"輪詢"
這詞看上去很高級(jí)的樣子,其實(shí)就是寫個(gè)ajax間隔一段時(shí)間不斷向服務(wù)器請(qǐng)求內(nèi)容.這活誰都干過.
然后我就想啊.如果用輪詢實(shí)現(xiàn),那也顯得太低級(jí)了吧.怎么著.咱得弄個(gè)高級(jí)點(diǎn)的技巧顯擺顯擺..于是,查了一番資料,一個(gè)更加裝逼的詞語蹦到了偶的眼前
"長(zhǎng)輪詢"
看,變長(zhǎng)了果然不一樣了.這個(gè)詞還伴隨著一個(gè)英文
"comet"
其實(shí)原理很簡(jiǎn)單.以往的web請(qǐng)求,服務(wù)器處理請(qǐng)求后要立即返回,盡管超時(shí)的時(shí)間也能到達(dá)30秒這么多(并不是說用了comet才可以允許連接在服務(wù)器等待,我也可以讓連接在服務(wù)器端sleep).但是連接只能存在于本次請(qǐng)求中.無法保持住.而comet允許連接請(qǐng)求過來后被保持住(保存起來,如session里面).當(dāng)我需要的時(shí)候,讀出來再返回給客戶端數(shù)據(jù).所以這種情況的所謂的"長(zhǎng)"長(zhǎng)在了服務(wù)器端.
長(zhǎng)輪詢比輪詢的好處在于,如果像是即時(shí)通訊,聊天室一類的應(yīng)用,輪詢并不能保證每次查閱服務(wù)器一定有數(shù)據(jù)需要返回,所以會(huì)造成很多沒用的請(qǐng)求到達(dá)服務(wù)器.而長(zhǎng)輪詢因?yàn)檫B接保持在了服務(wù)器,需要的時(shí)候激活就可以.所以就省去了很多沒用的請(qǐng)求.
長(zhǎng)輪詢適合那些數(shù)據(jù)反映需要及時(shí),但是數(shù)據(jù)量不大的場(chǎng)景.比如站內(nèi)消息.其實(shí)聊天室不是多么適合.因?yàn)槿硕嗟臅r(shí)候.長(zhǎng)輪詢和輪詢沒啥區(qū)別.所以,對(duì)于服務(wù)器與瀏覽器交互密集型的實(shí)時(shí)場(chǎng)景.長(zhǎng)輪詢并不能減少多余的請(qǐng)求.
長(zhǎng)輪詢使用ajax實(shí)現(xiàn)瀏覽器響應(yīng).其實(shí)也可以使用隱藏的iframe來做.畢竟那個(gè)奇葩的IE是我們不得不兼容的.
用iframe 模擬ajax請(qǐng)求的這種 叫做 "iframe streaming"
對(duì)于交互密集型實(shí)時(shí)場(chǎng)景.還有沒有辦法優(yōu)化.還真有.
對(duì)于 Servlet3 的 AsynContext 關(guān)閉有兩種情況.一種是正常的complete.另一種就是dispatch.
complete很容易理解.完成后.瀏覽器繼續(xù)請(qǐng)求一次.這叫長(zhǎng)連接.
如果不complete.而dispatch到自身.數(shù)據(jù)會(huì)返回到客戶端.但是連接并不需要再次請(qǐng)求.dispatch后的請(qǐng)求仍然可以繼續(xù)返回到客戶端.
所以這種請(qǐng)求方式只需要客戶端發(fā)起一次請(qǐng)求就可以了.
但是.好事多磨.對(duì)于前臺(tái)來說.由于連接被dispatch.ajax會(huì)報(bào)錯(cuò).(據(jù)說FF還是op.允許ajax繼續(xù)處理請(qǐng)求,我試驗(yàn)的chrome,報(bào)錯(cuò)了,如果誰成功了,一定告訴我.)
但是.我們可以使用隱藏的iframe來接收這些請(qǐng)求.就可以正常使用了.當(dāng)然.瀏覽器的加載按鈕會(huì)一直轉(zhuǎn)啊轉(zhuǎn)啊..
我個(gè)人比較喜歡dispatch這種方式.奇淫技巧很唬人啊.適合忽悠剛?cè)肼毜男∨笥褌児?.
轉(zhuǎn)載于:https://my.oschina.net/jsmagic/blog/125456
總結(jié)
以上是生活随笔為你收集整理的comet 异步请求技术中相关关键字解释 (新手向)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。