web消息推送的各种解决办法
本篇文章給大家分享的是有關(guān)web消息推送的各種解決辦法,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
在各種BS架構(gòu)的應(yīng)用程序中,往往都希望服務(wù)端能夠主動(dòng)地向客戶端推送各種消息,以達(dá)到類似于郵件、消息、待辦事項(xiàng)等通知。往BS架構(gòu)本身存在的問(wèn)題就是,服務(wù)器一直采用的是一問(wèn)一答的機(jī)制。這就意味著如果客戶端不主動(dòng)地向服務(wù)器發(fā)送消息,服務(wù)器就無(wú)法得知如何給客戶端推送消息。
web消息推送方法
隨著HTML、瀏覽器等各項(xiàng)技術(shù)、標(biāo)準(zhǔn)的發(fā)展,依次生成了不同的手段與方法能夠?qū)崿F(xiàn)服務(wù)端主動(dòng)推送消息,它們分別是:AJAX,Comet,ServerSent以及WebSocket。
小編將對(duì)上述提及到的各種技術(shù)手段進(jìn)行直白化的解釋。
web消息推送手段
AJAX
正常的一個(gè)頁(yè)面在瀏覽器中是這樣工作的:
用戶向給予瀏覽器一個(gè)需要訪問(wèn)的地址
瀏覽器根據(jù)這個(gè)地址訪問(wèn)服務(wù)器,并與服務(wù)器之間創(chuàng)建一個(gè)TCP連接(HTTP請(qǐng)求)
服務(wù)器根據(jù)這個(gè)地址和一些其它數(shù)據(jù),組建一段HTML文本,將寫入TCP連接,然后關(guān)閉連接
瀏覽器得到了來(lái)自服務(wù)器的HTML文本,解析并呈現(xiàn)了瀏覽器上給用戶瀏覽
此時(shí),用戶點(diǎn)擊了網(wǎng)站上任何一個(gè)<a>或觸發(fā)任何一個(gè)<form>提交時(shí):
瀏覽器根據(jù)form的參數(shù)或者a的參數(shù),作為訪問(wèn)的地址
與服務(wù)器創(chuàng)建TCP連接
服務(wù)器組建HTML文本,然后關(guān)閉連接
瀏覽器將當(dāng)前顯示的頁(yè)面摧毀,并按照新的HTML文本呈現(xiàn)一個(gè)新的頁(yè)面給用戶
我們不難發(fā)現(xiàn)的是整個(gè)過(guò)程中間,一旦建立了一個(gè)連接,頁(yè)面就無(wú)法再維護(hù)住了。整個(gè)過(guò)程看上去有點(diǎn)強(qiáng)買強(qiáng)賣,也許我只要一杯新的可樂(lè),但你非要給我一整個(gè)套餐組合。
此時(shí)我們可以了解一下XmlHttpRequest組件,這個(gè)組件提供我們手動(dòng)創(chuàng)建一個(gè)HTTP請(qǐng)求,發(fā)送我們想要的數(shù)據(jù),服務(wù)器也可以只返回我們想要的結(jié)果,最大的好處是,當(dāng)我們收到服務(wù)器的響應(yīng)時(shí),原來(lái)的頁(yè)面沒(méi)有被摧毀。這就好比,我喊一句"我的咖啡喝完了,我要續(xù)杯",然后服務(wù)員就拿了一杯咖啡過(guò)來(lái),而不是會(huì)把我沒(méi)吃完的套餐全部倒掉。
總結(jié)
以上是生活随笔為你收集整理的web消息推送的各种解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android学习笔记篇2. 单选按钮、
- 下一篇: SpringBoot单元测试运行时报错: