新聞中心
http如何像tcp一樣實(shí)時(shí)的收消息?

創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元興安做網(wǎng)站,已為上家服務(wù),為興安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
一、webim如何實(shí)現(xiàn)消息推送
webim通常有三種方式實(shí)現(xiàn)推送通道:
1)WebSocket
2)FlashSocket
3)http輪詢
其中1)和2)是用Tcp長連接實(shí)現(xiàn)的,其消息的實(shí)時(shí)性可以通過tcp保證。
方案3)才算是webim實(shí)現(xiàn)消息推送的“正統(tǒng)”方案,用http短連接輪詢的方式實(shí)現(xiàn)“偽長連接”,既然是輪詢,有朋友就對消息的實(shí)時(shí)性產(chǎn)生了質(zhì)疑。本文要解答,webim使用http長輪詢?nèi)绾伪WC消息的絕對實(shí)時(shí)性。
二、人們?yōu)槭裁磿`解http長輪詢不實(shí)時(shí)
什么是輪詢?我擦,這個(gè)該怎么解釋咧。
舉個(gè)栗子,在火車上想上洗手間,擠到洗手間旁,卻發(fā)現(xiàn)洗手間有人,于是你只能回座位繼續(xù)等。過了N分鐘,又朝洗手間的方向擠過去,卻發(fā)現(xiàn)洗手間還是有人,又只能回坐等。這么一而再,再而三的每隔N分鐘去洗手間查看洗手間是否有蹲位,這就是輪詢。
webim用輪詢的方式拉取消息會存在什么問題?
webim每隔N分鐘,輪詢調(diào)用 “獲取消息”接口,有可能出現(xiàn)消息的延時(shí),某一時(shí)刻剛拉取完消息,突然又產(chǎn)生了一條新消息,這條消息就必須等到N分鐘之后,再次發(fā)起“獲取消息”輪詢時(shí),才有機(jī)會獲取到。
減小輪詢時(shí)間間隔是否能解決消息延時(shí)的問題?
減小輪詢時(shí)間間隔的確可以縮短延時(shí)時(shí)間,但也不能保證消息絕對的實(shí)時(shí),同時(shí)又會產(chǎn)生新的問題,絕大部分的輪詢調(diào)用,都沒有消息返回,造成服務(wù)端極大的資源浪費(fèi)。
很多人基于上述直覺,認(rèn)為webim使用http長輪詢的方式拉取消息,會導(dǎo)致消息有延時(shí),其實(shí),webim的http長輪詢根本不是這么玩的。
三、長輪詢實(shí)際怎么玩
消息連接
webim和webserver之間建立一條http連接,專門用作消息通道,這條連接叫http消息連接【見下圖】
消息連接的4大特性
1)沒有消息到達(dá)的時(shí)候,這個(gè)http消息連接將被夯住,不返回,由于http是短連接,這個(gè)http消息連接最多被夯住90秒,就會被斷開(這是瀏覽器或者webserver的行為)
2)在1)的情況下,如果http消息連接被斷開,立馬再發(fā)起一個(gè)http消息連接【見下圖中的步驟1、2】
3)在1)和2)的配合下,瀏覽器與webserver之間將永遠(yuǎn)有一條消息連接在(極限情況下會出現(xiàn)4)),每次收到消息時(shí),這個(gè)消息連接就能及時(shí)將消息帶回瀏覽器頁面,并且在返回后,會立馬再發(fā)起一個(gè)http消息連接【見下圖中的步驟1、2、3】
4)如果消息到達(dá)時(shí),上一個(gè)http消息連接正在返回,沒有http消息連接可用(理論上http消息連接的返回是瞬時(shí)的,沒有連接可用出現(xiàn)的概率極小),則將消息暫存入消息池中,下一個(gè)消息連接到達(dá)后(上一個(gè)消息連接返回后,根據(jù)2)和3)會立馬返回新的消息連接,無等待時(shí)間),將消息帶回,并又立刻返回生成新的消息連接【見下圖中的步驟1、2、3、4、5、6、7】
上述1-4就能夠保證一直有一條http消息連接在,以保證webim消息推送的絕對實(shí)時(shí)性。
四、結(jié)論
webim通過http長輪詢可以保證消息的絕對實(shí)時(shí)性。這種實(shí)時(shí)性的保證不是通過增加輪詢頻率來保證的,而是通過夯住http消息連接來保證的,在大部分時(shí)間沒有實(shí)時(shí)消息的情況下,這個(gè)http消息連接對于webserver的請求壓力是90秒1次,能夠大大節(jié)省了web服務(wù)器資源。
文章轉(zhuǎn)載自微信公眾號“架構(gòu)師之路”
新聞名稱:http如何像tcp一樣實(shí)時(shí)的收消息?
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/dhhdhih.html


咨詢
建站咨詢
