W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
webim通常有三種方式實(shí)現(xiàn)推送通道:
1)WebSocket
2)FlashSocket
3)http輪詢(xún)
其中1)和2)是用Tcp長(zhǎng)連接實(shí)現(xiàn)的,其消息的實(shí)時(shí)性可以通過(guò)tcp保證。
方案3)才算是webim實(shí)現(xiàn)消息推送的“正統(tǒng)”方案,用http短連接輪詢(xún)的方式實(shí)現(xiàn)“偽長(zhǎng)連接”,既然是輪詢(xún),有朋友就對(duì)消息的實(shí)時(shí)性產(chǎn)生了質(zhì)疑。本文要解答,webim使用http長(zhǎng)輪詢(xún)?nèi)绾伪WC消息的絕對(duì)實(shí)時(shí)性。什么是輪詢(xún)?我擦,這個(gè)該怎么解釋咧。
舉個(gè)栗子,在火車(chē)上想上洗手間,擠到洗手間旁,卻發(fā)現(xiàn)洗手間有人,于是你只能回座位繼續(xù)等。過(guò)了N分鐘,又朝洗手間的方向擠過(guò)去,卻發(fā)現(xiàn)洗手間還是有人,又只能回坐等。這么一而再,再而三的每隔N分鐘去洗手間查看洗手間是否有蹲位,這就是輪詢(xún)。
webim用輪詢(xún)的方式拉取消息會(huì)存在什么問(wèn)題?
webim每隔N分鐘,輪詢(xún)調(diào)用 “獲取消息”接口,有可能出現(xiàn)消息的延時(shí),某一時(shí)刻剛拉取完消息,突然又產(chǎn)生了一條新消息,這條消息就必須等到N分鐘之后,再次發(fā)起“獲取消息”輪詢(xún)時(shí),才有機(jī)會(huì)獲取到。
減小輪詢(xún)時(shí)間間隔是否能解決消息延時(shí)的問(wèn)題?
減小輪詢(xún)時(shí)間間隔的確可以縮短延時(shí)時(shí)間,但也不能保證消息絕對(duì)的實(shí)時(shí),同時(shí)又會(huì)產(chǎn)生新的問(wèn)題,絕大部分的輪詢(xún)調(diào)用,都沒(méi)有消息返回,造成服務(wù)端極大的資源浪費(fèi)。
消息連接
webim和webserver之間建立一條http連接,專(zhuān)門(mén)用作消息通道,這條連接叫http消息連接【見(jiàn)下圖】
1)沒(méi)有消息到達(dá)的時(shí)候,這個(gè)http消息連接將被夯住,不返回,由于http是短連接,這個(gè)http消息連接最多被夯住90秒,就會(huì)被斷開(kāi)(這是瀏覽器或者webserver的行為)
webim通過(guò)http長(zhǎng)輪詢(xún)可以保證消息的絕對(duì)實(shí)時(shí)性。這種實(shí)時(shí)性的保證不是通過(guò)增加輪詢(xún)頻率來(lái)保證的,而是通過(guò)夯住http消息連接來(lái)保證的,在大部分時(shí)間沒(méi)有實(shí)時(shí)消息的情況下,這個(gè)http消息連接對(duì)于webserver的請(qǐng)求壓力是90秒1次,能夠大大節(jié)省了web服務(wù)器資源。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: