http如何像TCP一樣實時接收訊息

2021-07-28 08:08:43 字數 2283 閱讀 6653

**即時訊息(webim)通常有三種方式實現推送

(1)   websocket

(2)   flashsocket

(3)   http輪詢

其中(1)和(2)是用tcp長連線實現的,其訊息的實時性可以通過tcp保證。

方案(3)才算是webim實現訊息推送的「正統」方案,用http短連線輪詢的方式實現「偽長連線」。

什麼是輪詢

webim每隔n分鐘迴圈呼叫獲取訊息的介面,檢視是否有訊息,有訊息則帶回訊息,沒有則空返回。

輪詢的時間(n分鐘)就是訊息延時的時間,縮小輪詢時間可以縮短延時時間,增加訊息的及時性,但是同時會產生新的問題,絕大部分的輪詢呼叫介面,都是沒有時間返回的,造成服務端極大的資源浪費。

輪詢、長輪詢、長連線之間的區別

輪詢:客戶端向伺服器傳送乙個http連線,連線上伺服器後,查詢是否有訊息需要推送,然後帶回客戶端,若沒有,也返回,連線斷開,再重新建立乙個http連線。

說明:訊息實時性不高,伺服器壓力大。

長輪詢:客戶端向伺服器傳送乙個http連線,連線上伺服器,查詢是否有訊息需要推送,若有則立刻帶回客戶端,若沒有,則http連線一直保持連線,直到有訊息需要推送或者連線超時,則返回,斷開連線,然後立刻重新建立一條http連線。

說明:訊息實時性比較高,延遲小。

長連線:客戶端向伺服器傳送tcp連線,連線上伺服器後,客戶端與伺服器會一直保持連線。當伺服器有更新訊息時會立刻傳送到客戶端,而連線不斷開。(如果伺服器長時間沒有返回訊息,會造成連線超時,客戶端也會向伺服器從新傳送新的ajax請求)。

說明:訊息延遲小。

長短輪詢和長短連線的區別

第乙個區別是決定的方式:乙個tcp連線是否為長連線,是通過設定http的connection header來決定的,而且是需要兩邊都設定才有效。而一種輪詢方式是否為長輪詢,是根據服務端的處理方式來決定的,與客戶端沒有關係。

第二個區別就是實現的方式:連線的長短是通過協議來規定和實現的。而輪詢的長短,是伺服器通過程式設計的方式手動掛起請求來實現的。

長輪詢實現訊息推送

訊息連線

webim和webserver之間建立一條http連線,專門用作訊息通道,這條連線叫http訊息連線【見下圖】

訊息連線的4大特性

1)沒有訊息到達的時候,這個http訊息連線將被夯住,不返回,由於http是短連線,這個http訊息連線最多被夯住90秒,就會被斷開(這是瀏覽器或者webserver的行為)

2)在1)的情況下,如果http訊息連線被斷開,立馬再發起乙個http訊息連線【見下圖中的步驟1、2】

3)在1)和2)的配合下,瀏覽器與webserver之間將永遠有一條訊息連線在(極限情況下會出現4)),每次收到訊息時,這個訊息連線就能及時將訊息帶回瀏覽器頁面,並且在返回後,會立馬再發起乙個http訊息連線【見下圖中的步驟1、2、3】

4)如果訊息到達時,上乙個http訊息連線正在返回,沒有http訊息連線可用(理論上http訊息連線的返回是瞬時的,沒有連線可用出現的概率極小),則將訊息暫存入訊息池中,下乙個訊息連線到達後(上乙個訊息連線返回後,根據2)和3)會立馬返回新的訊息連線,無等待時間),將訊息帶回,並又立刻返回生成新的訊息連線【見下圖中的步驟1、2、3、4、5、6、7】

上述1-4就能夠保證一直有一條http訊息連線在,以保證webim訊息推送的絕對實時性。

長輪詢總結

webim通過http長輪詢可以保證訊息的絕對實時性。這種實時性的保證不是通過增加輪詢頻率來保證的,而是通過夯住http訊息連線來保證的,在大部分時間沒有實時訊息的情況下,這個http訊息連線對於webserver的請求壓力是90秒1次,能夠大大節省了web伺服器資源。

http如何像tcp一樣實時的收訊息

http如何像tcp一樣實時的收訊息?一 webim如何實現訊息推送 webim通常有三種方式實現推送通道 1 websocket 2 flashsocket 3 http輪詢 其中1 和2 是用tcp長連線實現的,其訊息的實時性可以通過tcp保證。方案3 才算是webim實現訊息推送的 正統 方案...

像外行一樣思考,像專家一樣實踐

像外行一樣思考,像專家一樣實踐,不只是說說而已。題記 看了試讀的章節有些日子,看完了試讀部分,其中一部分是能和我共鳴,還有一部分觀點,自己也比較贊成,但貌似又有些抽象。我想,書不單是用來讀的,讀一本好書,就像吃肉一樣,吸收書中的營養,把營養轉換為自己的血液,直到骨髓中,成為生命中的一部分。像外行一樣...

《像外行一樣思考,像專家一樣實踐》

這本書是在看 暗時間 時收集到的,書的副標題是科研成功之道,自己是個資訊工作者,也號稱科研工作者,雖然經常忙著一些雜活,沒有時間認真思考和做實驗。但從中找點立項 研究 演講 總結的經驗也是有益的。這本書的目錄比較有特點,竟然佔了12頁,基本上看了目錄也能了解了書的主要思想和內容。專家由於他受固有思想...