1. 程式人生 > >為什麼是長輪詢而不是持久連線。

為什麼是長輪詢而不是持久連線。

在web開發當中,常用的伺服器推技術主要是兩種,長輪詢和持久連線。

如果我們仔細觀察現有的產品實現,會發現,大多都會選擇長輪詢,而不是持久連線。(webqq、人人IM、facebook IM、新浪微博等都是基於長輪詢)。

在不考慮其他外掛技術,如flash等的情況下,對長輪詢和持久連線做一下對比如下:

優劣對比
長輪詢 持久連線
效能 重複建立連線,網路開銷大。 不需要重複建立連線,開銷小,但需要間隔傳送比較小的心跳包。
瀏覽器相容性 jsonp和xhr都可以相容所有瀏覽器。 iframe流可以相容所有瀏覽器。
網路相容性 可以相容任何透明代理,防火牆。 無法相容某些透明代理、防火牆。


我今天主要說一下《網路相容性

》這方面。現在,透明代理和防火牆代理的應用非常普遍。由於實際網路中,大量不支援http1.1以及不相容的攔截代理配置的情況下,

基於持久連線的服務推技術,就不能正確實現了。


如上圖所示的透明代理存在的情況下,內網的使用者瀏覽器端發起的持久連線,可能在透明代理等存在的情況下,錯誤地當做的常規的基於“請求-響應”的短連線請求。

這樣,當伺服器在傳送完資料,並繼續保持連線的情況下,透明代理可能不會及時或正確地將資料返回給使用者的瀏覽器端。

例如,透明代理可能會將伺服器的響應放到一塊緩衝區當中,當伺服器關閉連線時,代理再將資料一併返回。當發生這種問題的時候,輕者會造成訊息延遲,重者會導致客戶端一段時間內沒有收到心跳,而導致產生超時而主動斷開連線。

因此,在複雜網路情況下,基於持久連線的服務推技術很可能會失效。而基於長輪詢的伺服器推技術,由於實際上跟普通的http請求沒有根本上的差異,因而可以更好的穿過這些透明的中間代理。我想這也是很多WEBIM應用大多采用長輪詢而不是持久連線的理由之一吧。

相關推薦

為什麼是持久連線

在web開發當中,常用的伺服器推技術主要是兩種,長輪詢和持久連線。 如果我們仔細觀察現有的產品實現,會發現,大多都會選擇長輪詢,而不是持久連線。(webqq、人人IM、facebook IM、新浪微博等都是基於長輪詢)。 在不考慮其他外掛技術,如flash等的情況下,對長輪

jsonp方式下對連線的管理

隨著Web網際網路產品即時性要求的提高,瀏覽器端“服務端推”技術越來越被重視和應用起來。新浪微博,人人網,webqq,阿里旺旺網頁版,趕集網im,58同城im等等都在使用服務端推的技術。在websocket出現之前,真正意義上的瀏覽器端“伺服器推”技術是不存在。而所謂的Co

tcp連線,短連線,http短

短連線和長連線: 長輪詢和短輪詢 所謂輪詢,即是在一個迴圈週期內不斷髮起請求來得到資料的機制。只要有請求的地方,都可以實現輪詢,譬如各種事件驅動模型。它的長短是在於請求的返回週期。 短輪詢 短輪詢指的是在迴圈週期內,不斷髮起請求,每一次請求都立即

連線、短連線和WebSocket

對這四個概念不太清楚,今天專門搜尋瞭解一下,總結一下: 長連線:在HTTP 1.1,客戶端發出請求,服務端接收請求,雙方建立連線,在服務端沒有返回之前保持連線,當客戶端再發送請求時,它會使用同一個連線。這一直繼續到客戶端或伺服器端認為會話已經結束,其中一方中斷連

Web 通訊 之 連線(long polling)

基於HTTP的長連線,是一種通過長輪詢方式實現"伺服器推"的技術,它彌補了HTTP簡單的請求應答模式的不足,極大地增強了程式的實時性和互動性。 一、什麼是長連線、長輪詢? 用通俗易懂的話來說,就是客戶端不停的向伺服器傳送請求以獲取最新的資料資訊。這裡的“不停

http連線的理解

昨天翻了翻《HTTP權威指南》,看到HTTP連線管理這節,書中講到了HTTP事務,突然發現事務一詞在好多場合都用到了,事務簡單來說就是一連串的事情,要麼都做,要麼都不做,中間出了問題,整個過程都失敗,對於HTTP事務就是域名解析 --> 發起TCP的3次握手 --&g

談談HTTP協議中的短連線和短連線

---------------------  作者:左瀟龍  來源:CSDN  原文:https://blog.csdn.net/zuoxiaolong8810/article/details/65441709  版權宣告:本文為博主原創文章,轉載請附上博文連結!

VS 短

響應 tcp 朋友 輪詢 決定 多次 有一個 存在 新浪 創建基礎Web的實時系統時,通常會使用的到HTTP,但HTTP天生不是為實時,雙向溝通設計的。我們如何解決這個問題呢? 我們先來看一下HTTP協議: http 協議介紹: http 協議是請求/響應範式的, 每一個

優缺點分析

無法自動 頻繁 pre 安裝 定時 返回 http協議 維護 book 輪詢和長輪詢優缺點分析 輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。 優點:後端程序編寫比較容易。 缺點:請求中有大半是無用,浪費帶寬和服務器資源。 實例:適

AC 服務 ajax 情況下 ace 定時 客戶 ebo 小型 輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。優點:後端程序編寫比較容易。缺點:請求中有大半是無用,浪費帶寬和服務器資源。實例:適於小型應用。 長輪詢:客戶端向

java 內嵌 客戶 http協議 ash facebook book 定時 服務器 輪詢與長輪詢 輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。優點:後端程序編寫比較容易。缺點:請求中有大半是無用,浪費帶寬和服務器資源。實例:適

與Web Socket的前端實現

ebs ole 推送 require PE sockets str 服務 port Web Socket 應用場景:實現即時通訊:如股票交易行情分析、聊天室、在線遊戲等,替代輪詢和長輪詢 輪詢 輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP r

連接、socket連接、WebSocket

解決 無法自動 客戶端瀏覽器 主動 本質 情況下 服務器維護 ica 存在 輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。  優點:後端程序編寫比較容易。  缺點:請求中有大半是無用,浪費帶寬和服務器資源。(而每一次的 HTTP 請求

連接的區別

art 客戶端請求 一段 的區別 https 長連接 mqtt http 服務 一、http長連接 https://www.cnblogs.com/gotodsp/p/6366163.html 二、輪詢 客戶端每隔一段時間ajax https://blog.csdn.n

基於HTTP的簡單實現

Web客戶端與伺服器之間基於Ajax(http)的常用通訊方式,分為短連線與長輪詢。 短連線:客戶端和伺服器每進行一次HTTP操作,就建立一次連線,任務結束就中斷連線。 在長輪詢機制中,客戶端像傳統輪詢一樣從伺服器請求資料。然而,如果伺服器沒有可以立即返回給客戶端的資料,則不會立刻返回一個空結果, 而是保持這

通過spring提供的DeferredResult實現服務端推送訊息

DeferredResult字面意思就是推遲結果,是在servlet3.0以後引入了非同步請求之後,spring封裝了一下提供了相應的支援,也是一個很老的特性了。DeferredResult可以允許容器執行緒快速釋放以便可以接受更多的請求提升吞吐量,讓真正的業務邏輯在

給定一個字串,找到最長子串的長度,重複字元

思路:就是用set存資料,之後兩個指標i,j。其中i不斷向後遍歷,set中不斷新增i++的元素,當set遇到重複元素,則j向後移動一位,同時刪除j所在位置的的元素,並且比較此時長度 class Solution { public int lengthOfLongestS

利用實現微信網頁版掃碼登入

掃碼登入操作過程 手機登入微信,利用“掃一掃”功能掃描網頁上的二維碼手機掃描成功後,提示“登入網頁版微信”;網頁上顯示“成功掃描 請在手機點選確認以登入”手機端點選“登入網頁版微信”,網頁跳轉到使用者的微信操作介面 整個掃碼登入的操作過程還是挺簡單的,而且互動地實時性比較

和websocket

取數 rec bre 自己 udp server 查看 持久性 div 一、輪詢 在一些需要進行實時查詢的場景下應用比如投票系統:   大家一起在一個頁面上投票   在不刷新頁面的情況下,實時查看投票結果 1、後端代碼 from flask import F

websocket

輪詢   特點:每隔一段時間不短向後端傳送請求   缺點:消耗大,延遲 from flask import Flask,render_template,request,jsonify app = Flask(__name__) USERS = { 1:{"name":"Alex","c