男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

消息提醒別再用 WebSocket 和輪詢,有更好的方案SSE!

admin
2025年4月27日 8:34 本文熱度 199

概述

前端向后端請求數據常規來說都是使用 http 連接,除非是實時性非常高的項目,例如IM系統等需要使用到WebSocket。

但是項目中有時候存在尷尬的場景:

  1. 庫存信息
  2. 已讀未讀消息
  3. 實時同步數據
  4. ......

這種實時性比較高,但是數據量比較小的內容,使用 http 輪詢會讓系統增加非常多的資源損耗,而使用 WebSocket 則顯得非常沒必要。

所以 SSE 應運而生。(事實上SSE技術產生的時間非常早)

原理

  • 基于HTTP:SSE是基于HTTP的,這意味著它可以利用現有的HTTP基礎設施,如緩存、代理等。
  • 單向通信:SSE是一種單向通信協議,意味著數據只能從服務器流向客戶端。這與WebSocket不同,后者支持雙向通信。

其實說白了還是 http 連接,不同的是這是一個長連接,并且返回數據的格式不太一樣,僅此而已。

SSE采用事件流格式數據,每條消息由一行或多行組成,每一行都包含字段名和值,用冒號分隔。

并且 SSE 內置的自動重連機制。如果由于任何原因連接斷開,瀏覽器會自動嘗試重新建立連接。

開發

服務端

服務端主要是需要修改請求頭,其他的就是修改一下推送信息機制。

// app/controller/sse.js
const Controller = require('egg').Controller;

class SseController extends Controller {
  async stream() {
    const { ctx } = this;
    
    // 設置響應頭
    ctx.set('Content-Type''text/event-stream');
    ctx.set('Cache-Control''no-cache');
    ctx.set('Connection''keep-alive');

    // 發送初始連接確認消息
    ctx.body = `data: Connected\n\n`;

    // 可以在這里設置定時器或者其他機制來定期發送更新
    const timer = setInterval(() => {
      ctx.body += `data: ${new Date().toLocaleTimeString()}\n\n`;
    }, 2000);

    // 清理資源
    ctx.res.on('close', () => {
      clearInterval(timer);
    });
  }
}

module.exports = SseController;

客戶端

通過 EventSource 類訪問接口,實現一下數據回傳以后的邏輯。

if ('EventSource' in window) {
  var eventSource = new EventSource('/api/getMessage');

  // 響應數據連接
  eventSource.onmessage = function(event{
    console.log('New message:', event.data);
  };

  // 連接異常
  eventSource.onerror = function(event{
    console.error('Error occurred:', event);
    eventSource.close();
  };
else {
  console.log('Your browser does not support SSE.');
}

結論

其實在項目中使用 SSE 要比 WebSocket 快很多,這里說的是開發效率。

由于 SSE 是單向通信,一般來說要比 WebSocket 占用的資源更少。目前 SSE 我使用過的場景只有一個,就是已讀未讀消息的更新。

當然,有人說使用 SSE 只是將客戶端的輪詢換到了服務端,但其實并非如此。一個最根本的區別在于,輪詢即使空數據客戶端也要請求,而SSE則是有數據的時候向客戶端推送(例子不是)。


閱讀原文:原文鏈接


該文章在 2025/4/27 9:39:58 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 日本黄H兄妹H动漫一区二区三区 | 国产精品又黄又爽无遮挡嘿嘿国产在线麻豆波多野结衣 | 国产三级日产三级韩国三级韩级 | 尤物蜜芽AV在线播放 | 涩涩爱涩涩片影院 | 亚洲欧美另类在线观看一区二区 | 精品亚洲av无码 | 一区二区亚洲精品国产精华液 | 亚洲日韩av无码精品放毛片 | 91在线视频免费观看 | 99国产精品久久久久久久日本竹 | 中文字幕乱码熟妇五十中出 | 免费麻花豆传媒剧国产MV在线 | 国产伦精品一区二区三区视频明星 | 国产一卡三卡四卡无卡精品 | 日韩人妻熟女中文字幕 | 国产精品久久人妻无码A片 国产精品久久人妻无码蜜 国产精品久久人妻无码网站一区L | 亚洲av人无码综合在线观看 | 亚洲三级久久 | 麻豆国产成人av在线播放 | 国农村精品国产自线拍 | 亚洲第一永久免费网站 | 日韩一区二区三区无码A片 日韩一区二区在线免费观看 | 欧美性猛交内射兽交老熟妇 | 欧美日韩国产综合一区精 | 精品国产自在在线午夜精品 | 日日夜夜免费精品视频d | 蜜臀久久99精品久久久久久 | 少妇高潮灌满白浆毛片免费看 | 国产 麻豆 日韩 欧美 久久 | 韩国日本香港三级 | 久久精品蜜桃中文字幕无码 | 亚洲国产中文字幕 | 免费人成黄页在线观看视频国产 | 亚洲国产精品无码中文在线 | 亚洲国产一区二区在线观看 | 欧洲无人区天空码头IV在哪在线 | se亚洲国产综合自在线 | 中文 在线 日韩 亚洲 欧美 | 91福利国产在线观看香蕉 | 亚洲精品无码久久久久久 |