輪詢干毅、長輪詢宜猜、長連接、socket連接溶锭、WebSocket

Web端即時通訊技術:即時通訊技術簡單的說就是實現這樣一種功能:服務器端可以即時地將數據的更新或變化反應到客戶端宝恶,例如消息即時推送等功能都是通過這種技術實現的。但是在Web中趴捅,由于瀏覽器的限制垫毙,實現即時通訊需要借助一些方法。這種限制出現的主要原因是拱绑,一般的Web通信都是瀏覽器先發(fā)送請求到服務器综芥,服務器再進行響應完成數據的現實更新。

  實現Web端即時通訊的方法:實現即時通訊主要有四種方式猎拨,它們分別是輪詢膀藐、長輪詢(comet)、長連接(SSE)红省、WebSocket额各。它們大體可以分為兩類,一種是在HTTP基礎上實現的吧恃,包括短輪詢虾啦、comet和SSE;另一種不是在HTTP基礎上實現是痕寓,即WebSocket傲醉。下面分別介紹一下這四種輪詢方式,以及它們各自的優(yōu)缺點呻率。

①輪詢

  短輪詢的基本思路就是瀏覽器每隔一段時間向瀏覽器發(fā)送http請求硬毕,服務器端在收到請求后,不論是否有數據更新礼仗,都直接進行響應吐咳。這種方式實現的即時通信,本質上還是瀏覽器發(fā)送請求元践,服務器接受請求的一個過程挪丢,通過讓客戶端不斷的進行請求,使得客戶端能夠模擬實時地收到服務器端的數據的變化卢厂。

  這種方式的優(yōu)點是比較簡單乾蓬,易于理解,實現起來也沒有什么技術難點慎恒。缺點是顯而易見的任内,這種方式由于需要不斷的建立http連接撵渡,嚴重浪費了服務器端和客戶端的資源。尤其是在客戶端死嗦,距離來說趋距,如果有數量級想對比較大的人同時位于基于短輪詢的應用中,那么每一個用戶的客戶端都會瘋狂的向服務器端發(fā)送http請求越除,而且不會間斷节腐。人數越多,服務器端壓力越大摘盆,這是很不合理的翼雀。

  因此短輪詢不適用于那些同時在線用戶數量比較大,并且很注重性能的Web應用孩擂。

varxhr =new XMLHttpRequest();

? ? setInterval(function(){

? ? ? ? xhr.open('GET','/user');

? ? ? ? xhr.onreadystatechange =function(){

? ? ? ? };

? ? ? ? xhr.send();

? ? },1000)


②長輪詢(comet)

ajax實現:

  當服務器收到客戶端發(fā)來的請求后,服務器端不會直接進行響應狼渊,而是先將這個請求掛起,然后判斷服務器端數據是否有更新类垦。如果有更新狈邑,則進行響應,如果一直沒有數據蚤认,則到達一定的時間限制(服務器端設置)才返回米苹。?。 客戶端JavaScript響應處理函數會在處理完服務器返回的信息后砰琢,再次發(fā)出請求驱入,重新建立連接。

  長輪詢和短輪詢比起來氯析,明顯減少了很多不必要的http請求次數,相比之下節(jié)約了資源莺褒。長輪詢的缺點在于掩缓,連接掛起也會導致資源的浪費。

function ajax(){

? ? ? ? varxhr =new XMLHttpRequest();

? ? ? ? xhr.open('GET','/user');

? ? ? ? xhr.onreadystatechange =function(){

? ? ? ? ? ? ? ajax();

? ? ? ? };

? ? ? ? xhr.send();

? ? }


輪詢與長輪詢都是基于HTTP的遵岩,兩者本身存在著缺陷:輪詢需要更快的處理速度你辣;長輪詢則更要求處理并發(fā)的能力;兩者都是“被動型服務器”的體現:服務器不會主動推送信息,而是在客戶端發(fā)送ajax請求后進行返回的響應尘执。而理想的模型是"在服務器端數據有了變化后舍哄,可以主動推送給客戶端",這種"主動型"服務器是解決這類問題的很好的方案。Web Sockets就是這樣的方案誊锭。

③長連接(SSE)

  SSE是HTML5新增的功能表悬,全稱為Server-Sent Events。它可以允許服務推送數據到客戶端丧靡。SSE在本質上就與之前的長輪詢蟆沫、短輪詢不同籽暇,雖然都是基于http協(xié)議的,但是輪詢需要客戶端先發(fā)送請求饭庞。而SSE最大的特點就是不需要客戶端發(fā)送請求戒悠,可以實現只要服務器端數據有更新,就可以馬上發(fā)送到客戶端舟山。

  SSE的優(yōu)勢很明顯绸狐,它不需要建立或保持大量的客戶端發(fā)往服務器端的請求,節(jié)約了很多資源累盗,提升應用性能寒矿。并且后面會介紹道,SSE的實現非常簡單幅骄,并且不需要依賴其他插件劫窒。

④WebSocket

  WebSocket是Html5定義的一個新協(xié)議,與傳統(tǒng)的http協(xié)議不同拆座,該協(xié)議可以實現服務器與客戶端之間全雙工通信主巍。簡單來說,首先需要在客戶端和服務器端建立起一個連接挪凑,這部分需要http孕索。連接一旦建立,客戶端和服務器端就處于平等的地位躏碳,可以相互發(fā)送數據搞旭,不存在請求和響應的區(qū)別。

  WebSocket的優(yōu)點是實現了雙向通信菇绵,缺點是服務器端的邏輯非常復雜∫奚現在針對不同的后臺語言有不同的插件可以使用。

http://www.cnblogs.com/huchong/p/8530067.html

四種Web即時通信技術比較

  從兼容性角度考慮咬最,短輪詢>長輪詢>長連接SSE>WebSocket翎嫡;

  從性能方面考慮,WebSocket>長連接SSE>長輪詢>短輪詢永乌。





????????輪詢:客戶端定時向服務器發(fā)送Ajax請求惑申,服務器接到請求后馬上返回響應信息并關閉連接。

  優(yōu)點:后端程序編寫比較容易翅雏。

  缺點:請求中有大半是無用圈驼,浪費帶寬和服務器資源。(而每一次的 HTTP 請求和應答都帶有完整的 HTTP 頭信息望几,這就增加了每次傳輸的數據量)

  實例:適于小型應用绩脆。

長輪詢:客戶端向服務器發(fā)送Ajax請求,服務器接到請求后hold住連接,直到有新消息才返回響應信息并關閉連接(或到了設定的超時時間關閉連接)衙伶,客戶端處理完響應信息后再向服務器發(fā)送新的請求祈坠。

  優(yōu)點:在無消息的情況下不會頻繁的請求,節(jié)省了網絡流量矢劲,解決了服務端一直疲于接受請求的窘境

  缺點:服務器hold連接會消耗資源赦拘,需要同時維護多個線程,服務器所能承載的TCP連接數是有上限的芬沉,這種輪詢很容易把連接數頂滿躺同。

  實例:WebQQ、Hi網頁版丸逸、Facebook IM蹋艺。

長連接:在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求黄刚,服務器端就能源源不斷地往客戶端輸入數據捎谨。

  優(yōu)點:消息即時到達,不發(fā)無用請求憔维。

  缺點:服務器維護一個長連接會增加開銷涛救。

  實例:Gmail聊天

Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息后控制頁面的顯示业扒。

  優(yōu)點:實現真正的即時通信检吆,而不是偽即時。

  缺點:客戶端必須安裝Flash插件程储;非HTTP協(xié)議蹭沛,無法自動穿越防火墻。

  實例:網絡互動游戲章鲤。

WebSocket:

  WebSocket 協(xié)議本質上是一個基于 TCP 的協(xié)議摊灭。為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向服務器發(fā)起一個 HTTP 請求败徊,這個請求和通常的 HTTP 請求不同帚呼,包含了一些附加頭信息,其中附加頭信息”Upgrade: WebSocket”表 明這是一個申請協(xié)議升級的 HTTP 請求集嵌,服務器端解析這些附加的頭信息然后產生應答信息返回給客戶端,客戶端和服務器端的 WebSocket 連接就建立起來了御毅,雙方就可以通過這個連接通道自由的傳遞信息根欧,并且這個連接會持續(xù)存在直到客戶端或者服務器端的某一方主動的關閉連接。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末端蛆,一起剝皮案震驚了整個濱河市凤粗,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖嫌拣,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡四瘫,警方通過查閱死者的電腦和手機八孝,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灰瞻,“玉大人腥例,你說我怎么就攤上這事≡腿螅” “怎么了燎竖?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長要销。 經常有香客問我构回,道長,這世上最難降的妖魔是什么疏咐? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任纤掸,我火速辦了婚禮,結果婚禮上凳鬓,老公的妹妹穿的比我還像新娘茁肠。我一直安慰自己,他們只是感情好缩举,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布垦梆。 她就那樣靜靜地躺著,像睡著了一般仅孩。 火紅的嫁衣襯著肌膚如雪托猩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天辽慕,我揣著相機與錄音京腥,去河邊找鬼。 笑死溅蛉,一個胖子當著我的面吹牛公浪,可吹牛的內容都是我干的。 我是一名探鬼主播船侧,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欠气,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镜撩?” 一聲冷哼從身側響起预柒,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宜鸯,有當地人在樹林里發(fā)現了一具尸體憔古,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年淋袖,在試婚紗的時候發(fā)現自己被綠了鸿市。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡适贸,死狀恐怖灸芳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拜姿,我是刑警寧澤烙样,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蕊肥,受9級特大地震影響谒获,放射性物質發(fā)生泄漏。R本人自食惡果不足惜壁却,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一批狱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧展东,春花似錦赔硫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砸王,卻和暖如春推盛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谦铃。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工耘成, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驹闰。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像嘹朗,于是被迫代替她去往敵國和親师妙。 傳聞我的和親對象是個殘疾皇子疆栏,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容