javascript - Ajax實現的長輪詢如何才能不阻塞同一時間內頁面的其他Ajax請求(同域請求)呢?

來源:互聯網
上載者:User
長輪詢的實現是用xmlhttprequest遞迴得到的,頁面一旦加入了這種輪詢方式,其他地方的ajax請求就沒反應了,比如滾動到頁底自動載入新文章。查了資料,據說HTTP 1.1是不允許同一時間用戶端向同一伺服器建立2個http串連。如何解決?

回複內容:

長輪詢的實現是用xmlhttprequest遞迴得到的,頁面一旦加入了這種輪詢方式,其他地方的ajax請求就沒反應了,比如滾動到頁底自動載入新文章。查了資料,據說HTTP 1.1是不允許同一時間用戶端向同一伺服器建立2個http串連。如何解決?

據說HTTP 1.1是不允許同一時間用戶端向同一伺服器建立2個http串連

這個說法不對

實際上是不能並發訪問同一個網站使用了session的頁面,因為訪問A頁面時,session被鎖住了,B頁面要等A頁面結束釋放鎖才能被執行。解決方案就是不用session,或者session使用後立刻釋放(php 使用session_write_close釋放session鎖)

回過一次了,再回一次

直接終止輪詢返回當前結果(輪詢結果,可能為空白),發起其他地方的ajax請求,得到結果,然後再開個輪詢唄(可能我這想法太naive了),或者改需求哈哈。

其實用輪詢的方式實現server push(一般都是這個作用吧?),不如用socket,不過好像其標準還不是太清晰。具體請google,對了昨天還看到個有人分享的文章:訊息推送機制技術設計

遞迴一個LongPolling,在開啟第二個請求時,第一個請求的串連已經被關閉了。那實際上就還有一個可用的通道。只要保證後端對應的資料服務返回足夠快,那麼一個通道也可以不block。

至於別的方案麼,繞個圈子JSONP,Flash XML Socket/Websocket,某些Ajax放在別的域下,然後配置server的CORS,或者iframe什麼的。

講一下ifame的資料提交方式

用iframe實際上是用form提交資料的方式,把資料提交給一個iframe,然後返回一個頁面在iframe中,頁面中是一段js代碼
例如

用這種方式把資料提交到後台進行處理,在低版本瀏覽器中,通常使用此方法,上傳圖片

在當前頁面中,要在window對象下定義一個全域對象或方式,可以使用window.parent來調用此方法

使用iframe來提交資料,要與後端進行約定,在前端所執行的js方法。 一般資料提交不建議使用iframe方式。還是ajax較為方使

能不能把長輪詢改下請求方式,在用戶端使用js定時去請求伺服器端,伺服器端設定響應的時間。到了設定的時間就去響應。仿照隊列,前後端都排好隊。先來的先服務。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.