欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?常規(guī)輪詢長輪詢Long?polling實現(xiàn)示例詳解

 更新時間:2022年12月29日 09:46:04   作者:莫凡是莫煩  
這篇文章主要為大家介紹了java?常規(guī)輪詢長輪詢Long?polling實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

長輪詢是與服務器保持持久連接的最簡單的方式,它不使用任何特定的協(xié)議,例如 WebSocket 或者 Server Sent Event。

它很容易實現(xiàn),在很多場景下也很好用。

常規(guī)輪詢

從服務器獲取新信息的最簡單的方式是定期輪詢。也就是說,定期向服務器發(fā)出請求:“你好,我在這兒,你有關于我的任何信息嗎?”例如,每 10 秒一次。

作為響應,服務器首先通知自己,客戶端處于在線狀態(tài),然后 —— 發(fā)送目前為止的消息包。

這可行,但是也有些缺點:

  • 消息傳遞的延遲最多為 10 秒(兩個請求之間)。
  • 即使沒有消息,服務器也會每隔 10 秒被請求轟炸一次,即使用戶切換到其他地方或者處于休眠狀態(tài),也是如此。就性能而言,這是一個很大的負擔。

因此,如果我們討論的是一個非常小的服務,那么這種方式可能可行,但總的來說,它需要改進。

長輪詢

所謂“長輪詢”是輪詢服務器的一種更好的方式。

它也很容易實現(xiàn),并且可以無延遲地傳遞消息。

其流程為:

  • 請求發(fā)送到服務器。
  • 服務器在有消息之前不會關閉連接。
  • 當消息出現(xiàn)時 —— 服務器將對其請求作出響應。
  • 瀏覽器立即發(fā)出一個新的請求。

對于此方法,瀏覽器發(fā)出一個請求并與服務器之間建立起一個掛起的(pending)連接的情況是標準的。僅在有消息被傳遞時,才會重新建立連接。

如果連接丟失,可能是因為網絡錯誤,瀏覽器會立即發(fā)送一個新請求。

實現(xiàn)長輪詢的客戶端 subscribe 函數(shù)的示例代碼:

async function subscribe() {
  let response = await fetch("/subscribe");
  if (response.status == 502) {
    // 狀態(tài) 502 是連接超時錯誤,
    // 連接掛起時間過長時可能會發(fā)生,
    // 遠程服務器或代理會關閉它
    // 讓我們重新連接
    await subscribe();
  } else if (response.status != 200) {
    // 一個 error —— 讓我們顯示它
    showMessage(response.statusText);
    // 一秒后重新連接
    await new Promise(resolve => setTimeout(resolve, 1000));
    await subscribe();
  } else {
    // 獲取并顯示消息
    let message = await response.text();
    showMessage(message);
    // 再次調用 subscribe() 以獲取下一條消息
    await subscribe();
  }
}
subscribe();

正如你所看到的,subscribe 函數(shù)發(fā)起了一個 fetch,然后等待響應,處理它,并再次調用自身。

服務器應該可以處理許多掛起的連接

服務器架構必須能夠處理許多掛起的連接。

某些服務器架構是每個連接對應一個進程,導致進程數(shù)和連接數(shù)一樣多,而每個進程都會消耗相當多的內存。因此,過多的連接會消耗掉全部內存。

使用像 PHP 和 Ruby 語言編寫的后端程序會經常遇到這個問題。

使用 Node.js 編寫的服務端程序通常不會出現(xiàn)此類問題。

也就是說,這不是編程語言的問題。大多數(shù)現(xiàn)代編程語言,包括 PHP 和 Ruby,都允許實現(xiàn)更適當?shù)暮蠖顺绦颉V皇钦埓_保你的服務器架構在同時有很多連接的情況下能夠正常工作。

以上就是java 常規(guī)輪詢長輪詢Long polling實現(xiàn)示例詳解的詳細內容,更多關于java 常規(guī)輪詢長輪詢的資料請關注腳本之家其它相關文章!

相關文章

  • java input 調用手機相機和本地照片上傳圖片到服務器然后壓縮的方法

    java input 調用手機相機和本地照片上傳圖片到服務器然后壓縮的方法

    今天小編就為大家分享一篇java input 實現(xiàn)調用手機相機和本地照片上傳圖片到服務器然后壓縮的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Java并發(fā)編程中的volatile關鍵字詳解

    Java并發(fā)編程中的volatile關鍵字詳解

    這篇文章主要介紹了Java并發(fā)編程中的volatile關鍵字詳解,volatile?用于保證我們某個變量的可見性,使其一直存放在主存中,不被移動到某個線程的私有工作內存中,需要的朋友可以參考下
    2023-08-08
  • 利用Java工具類Hutool實現(xiàn)驗證碼校驗功能

    利用Java工具類Hutool實現(xiàn)驗證碼校驗功能

    這篇文章主要介紹了利用Java工具類Hutool實現(xiàn)驗證碼校驗功能,利用Hutool實現(xiàn)驗證碼校驗,校驗的Servlet與今天的第一篇是一樣的,唯一就是驗證碼的生成是不一樣的,利用Hutool生成驗證碼更快捷.需要的朋友可以參考下
    2022-10-10
  • 基于Java實現(xiàn)Redis多級緩存方案

    基于Java實現(xiàn)Redis多級緩存方案

    這篇文章主要介紹了Redis多級緩存方案分享,傳統(tǒng)緩存方案、多級緩存方案、JVM本地緩存,舉例說明這些方案,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • springboot項目事務標簽驗證

    springboot項目事務標簽驗證

    本文主要介紹了springboot項目事務標簽驗證,文中通過示例代碼介紹的非常詳細,詳細的介紹了不加事務標簽和加事物標簽的使用,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • SpringCloud容器化服務發(fā)現(xiàn)及注冊實現(xiàn)方法解析

    SpringCloud容器化服務發(fā)現(xiàn)及注冊實現(xiàn)方法解析

    這篇文章主要介紹了SpringCloud容器化服務發(fā)現(xiàn)及注冊實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Intellij IDEA插件開發(fā)入門詳解

    Intellij IDEA插件開發(fā)入門詳解

    這篇文章主要介紹了Intellij IDEA插件開發(fā)入門詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 通過源代碼分析Mybatis的功能流程詳解

    通過源代碼分析Mybatis的功能流程詳解

    這篇文章主要介紹了通過源代碼分析Mybatis的功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • SpringCloud大文件分片斷點上傳實現(xiàn)原理

    SpringCloud大文件分片斷點上傳實現(xiàn)原理

    這篇文章主要介紹了SpringCloud大文件分片斷點上傳實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 使用Java把文本內容轉換成網頁的實現(xiàn)方法分享

    使用Java把文本內容轉換成網頁的實現(xiàn)方法分享

    這篇文章主要介紹了使用Java把文本內容轉換成網頁的實現(xiàn)方法分享,利用到了Java中的文件io包,需要的朋友可以參考下
    2015-11-11

最新評論