精品熟人妻一区二区三区四区不卡-精品爽黄69天堂a-精品水蜜桃久久久久久久-精品丝袜国产自在线拍-精品丝袜国产自在线拍a-精品丝袜国产自在线拍免费看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

概述

前端向后端請(qǐng)求數(shù)據(jù)常規(guī)來(lái)說(shuō)都是使用 http 連接,除非是實(shí)時(shí)性非常高的項(xiàng)目,例如IM系統(tǒng)等需要使用到WebSocket。

但是項(xiàng)目中有時(shí)候存在尷尬的場(chǎng)景:

  1. 庫(kù)存信息
  2. 已讀未讀消息
  3. 實(shí)時(shí)同步數(shù)據(jù)
  4. ......

這種實(shí)時(shí)性比較高,但是數(shù)據(jù)量比較小的內(nèi)容,使用 http 輪詢(xún)會(huì)讓系統(tǒng)增加非常多的資源損耗,而使用 WebSocket 則顯得非常沒(méi)必要。

所以 SSE 應(yīng)運(yùn)而生。(事實(shí)上SSE技術(shù)產(chǎn)生的時(shí)間非常早)

原理

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

其實(shí)說(shuō)白了還是 http 連接,不同的是這是一個(gè)長(zhǎng)連接,并且返回?cái)?shù)據(jù)的格式不太一樣,僅此而已。

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

并且 SSE 內(nèi)置的自動(dòng)重連機(jī)制。如果由于任何原因連接斷開(kāi),瀏覽器會(huì)自動(dòng)嘗試重新建立連接。

開(kāi)發(fā)

服務(wù)端

服務(wù)端主要是需要修改請(qǐng)求頭,其他的就是修改一下推送信息機(jī)制。

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

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

    // 發(fā)送初始連接確認(rèn)消息
    ctx.body = `data: Connected\n\n`;

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

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

module.exports = SseController;

客戶(hù)端

通過(guò) EventSource 類(lèi)訪(fǎng)問(wèn)接口,實(shí)現(xiàn)一下數(shù)據(jù)回傳以后的邏輯。

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

  // 響應(yīng)數(shù)據(jù)連接
  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.');
}

結(jié)論

其實(shí)在項(xiàng)目中使用 SSE 要比 WebSocket 快很多,這里說(shuō)的是開(kāi)發(fā)效率。

由于 SSE 是單向通信,一般來(lái)說(shuō)要比 WebSocket 占用的資源更少。目前 SSE 我使用過(guò)的場(chǎng)景只有一個(gè),就是已讀未讀消息的更新。

當(dāng)然,有人說(shuō)使用 SSE 只是將客戶(hù)端的輪詢(xún)換到了服務(wù)端,但其實(shí)并非如此。一個(gè)最根本的區(qū)別在于,輪詢(xún)即使空數(shù)據(jù)客戶(hù)端也要請(qǐng)求,而SSE則是有數(shù)據(jù)的時(shí)候向客戶(hù)端推送(例子不是)。


閱讀原文:原文鏈接


該文章在 2025/4/27 9:39:58 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产亚洲制服免视频 | 亚洲成a人片在线观看国产 亚洲成a人片在线观看老师 | 人人爽人人爽人人片av东京热 | 国产剧情无码在线精品 | 蜜臀av国内精品久久久 | 国产亚洲综合一区二区a片吴施蒙 | 日日夜夜精品视频天天7799男男 | 黄网站色成年片大免费高清 | av中文字幕潮喷在线 | 国产女人aaa级久 | 亚洲av电影天堂男人的天堂 | 久99中文在线视频 | 国产精品热九九无码aⅴ | 精品国产免费网站二区二区 | 日韩亚洲欧美高清一区二区久 | 天天躁日日躁狠狠躁人妻 | 99国产欧美久久久精品蜜芽 | 日本动漫在中国的传播学研究 | 99精品久久久久久久久久综合 | 91久久精品国产91久久性色tv | 91热久久免费视频精品欧洲 | 国产欧美一区二区三区在线看 | 加勒比在线一区二区三区 | 免费一级无码婬片片毛片 | 亚洲精品乱码 | 日韩毛片一级在线观看 | 午夜福利1000集合集92 | 国产精品高清视亚洲 | 人妻少妇久久久久久97人 | 国产果冻| 日本免费人成视频在线观看 | 国产人成久久久久精 | 精品无码又大又粗又黄的免费视频 | 婷婷综合久久一区二区三区 | 伊人亚洲综合中文字幕 | 国产成人无码精品久久久免费 | 99久久精品国产高清一区二区 | 午夜三级a三级三点在线观看 | 99久久国产综合精品五月天喷水 | 亚洲熟妇成 | 国产成人精品电影在线观看 |