SSE代替輪詢?

什么是 SSE

SSE(Server-Sent Events,服務器發送事件),為特定目的而擴展的 HTTP 協議,用于實現服務器向客戶端推送實時數據的單向通信。如果連接斷開,瀏覽器會自動重連,傳輸的數據基于文本格式。

SSE 的傳輸屬于流式傳輸,流式傳輸的定義就是允許數據在發送方和接收方在建立連接之后,以連續的流的形式傳輸,不需要頻繁的斷開和建立連接。

幾個重點:

  • 單向通信,服務端向客戶端推送數據,客戶端無法發送數據給客戶端
  • 基于 HTTP 協議
  • 如果連接斷開,瀏覽器會自動重新連接
  • SSE 僅支持文本數據傳輸
SSE demo

node:

const http = require('http');const server = http.createServer((req, res) => {if (req.url === '/events') {res.writeHead(200, {'Content-Type': 'text/event-stream','Cache-Control': 'no-cache','Connection': 'keep-alive','Access-Control-Allow-Origin': '*'});randmoMessage(res);}
});server.listen(3000, () => {console.log('http://localhost:3000');
});function getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min;
}function randmoMessage(res) {let time = getRandomInt(2, 5) * 1000;setTimeout(() => {res.write(`data: ${JSON.stringify({ interval: time })}\n\n`);randmoMessage(res);}, time)
}

html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SSE</title>
</head>
<body><div id="content"></div><script>const eventSource = new EventSource('http://localhost:3000/events');const el = document.getElementById('content');eventSource.onmessage = function(event) {const elP = document.createElement("p");const data = JSON.parse(event.data);elP.textContent = `From SSE: interval: ${data.interval}`;el.appendChild(elP);};</script>
</body>
</html>

結果:

在這里插入圖片描述

一些探討
  • 占用瀏覽器連接數:瀏覽器限制了 HTTP 的并發,這算是一個比較致命的缺點,當然,專門一個域名使用那就不算缺點,否則輪詢可能還是比較好的選擇
  • 請求參數和請求頭:參數可以用 url,且本身不支持自定義請求頭,請求頭需要 Fetch 或 XMLHttpRequest 初始化會話設置(查到了,但是沒試驗)
  • 與 websocket 對比:websocket 擁有更高的傳輸效率和更低的延遲,拋開技術實現,SSE 對服務器壓力會小一些
  • 使用場景:MDN 給出的推薦使用場景,處理如社交媒體狀態更新、消息來源(news feed)或將數據傳遞到客戶端存儲機制(如 IndexedDB 或 web 存儲)之類的,所有的技術都不可能十全十美,最重要的是適合,所以什么場景使用都要根據現實情況來決定,比如個人覺得消息通知、數據大屏等就很值得使用
  • chatgpt 的交互方式是否也可以用 SSE:看起來流式傳輸很適合做這樣的交互,后端返回什么,前端渲染什么,不過,chatgpt 看起來是使用 websocket,在 network 里面只有找到 websocket 一直在響應

以前確實是不知道有這么個 API,以后要是有機會,某些場景應該是可以嘗試一下。

歡迎關注訂閱號 coding個人筆記

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39163.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣(2024.07.01)

1. 84——柱狀圖中最大的矩形 給定 n 個非負整數&#xff0c;用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰&#xff0c;且寬度為 1 。 求在該柱狀圖中&#xff0c;能夠勾勒出來的矩形的最大面積。 標簽&#xff1a;棧&#xff0c;數組&#xff0c;單調棧&#xff08;目…

面試題--SpringBoot

SpringBoot SpringBoot 是什么(了解) 是 Spring 的子項目,主要簡化 Spring 開發難度,去掉了繁重配置,提供各種啟動器,可以 讓程序員很快上手,節省開發時間. SpringBoot 的優點(必會) SpringBoot 對上述 Spring 的缺點進行的改善和優化&#xff0c;基于約定優于配置的思想&am…

rust嵌入式開發2024

老的rust embedded book 其實過時了. 正確的姿勢是embassy 入手. 先說下以前rust寫嵌入怎么教學小白的. 第一步,從這里 svd2rust 工具,自己生成庫第二部,有了這個庫,相當于就有了pac外設訪問文件,然后其實就可以搞起來了. 那么為啥不好搞了. 因為太亂了. 小白喜歡你告我咋弄…

[python][Anaconda]使用jupyter打開F盤或其他盤文件

jupyter有一個非常不好的體驗&#xff0c;就是不能在界面切換到其他盤來打開文件。 使用它&#xff0c;比較死板的操作是要先進入文件目錄&#xff0c;再運行jupyter。 以Windows的Anaconda安裝了jupyter lab或jupyter notebook為例。 1&#xff0c;先運行Anaconda Prompt 2&…

[Day 22] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

大數據與AI的關聯性 引言 大數據和人工智能&#xff08;AI&#xff09;是當今科技界的兩大熱門話題。這兩者的聯繫愈加緊密&#xff0c;相互影響和促進&#xff0c;形成了一個強大的技術生態系統。大數據提供了豐富的數據來源&#xff0c;而AI則利用這些數據來訓練和優化算法…

基于OpenCV與Keras的停車場車位自動識別系統

本項目旨在利用計算機視覺技術和深度學習算法&#xff0c;實現對停車場車位狀態的實時自動識別。通過攝像頭監控停車場內部&#xff0c;系統能夠高效準確地辨認車位是否被占用&#xff0c;為車主提供實時的空閑車位信息&#xff0c;同時為停車場管理者提供智能化的車位管理工具…

網優小插件_基于chrome瀏覽器Automa插件編寫抓取物業點信息小工具

日常在無線網絡優化&#xff0c;經常需要提取某一地市&#xff0c;某個屬性物業點信息&#xff08;物業點名稱、地址、及經緯度信息&#xff09;&#xff0c;本文介紹基于chrome瀏覽器Automat插件開發自動化工具&#xff0c;利用百度地圖經緯度拾取網資源開發一個抓取物業點基本…

2024年了cv還有什么可以卷的嗎?

2024年&#xff0c;計算機視覺&#xff08;CV&#xff09;領域依然有很多可以探索和創新的方向。以下是一些潛在的研究熱點&#xff1a; 自監督學習與無監督學習&#xff1a;繼續探索如何在沒有大量標注數據的情況下訓練高性能的模型&#xff0c;尤其是跨模態自監督學習和多任務…

為什么這幾年參加PMP考試的人越來越多

參加PMP認證的人越來越多的原因我認為和社會發展、職場競爭、個人提升等等方面有著不小的關系。國際認證與國內認證的性質、發展途徑會有一些區別&#xff0c;PMP引進到中國二十余年&#xff0c;報考人數持增長狀態也是正常的。 具體可以從下面這幾個點來展開論述。 市場競爭…

全面掌握 Postman 數據導入與導出:詳細指南

Postman 是一款廣泛使用的 API 開發工具&#xff0c;它提供了豐富的功能來幫助開發者測試、開發和維護 API。其中&#xff0c;數據導入和導出是 Postman 中非常重要的功能之一&#xff0c;它們允許用戶將工作從一個環境遷移到另一個環境&#xff0c;或者與團隊成員共享配置。本…

面試專區|【88道測試工具考核高頻題整理(附答案背誦版)】

常用的監控工具有哪些&#xff1f; 常用的監控工具有以下幾種&#xff1a; Zabbix&#xff1a;是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級開源解決方案&#xff0c;能監視各種網絡參數&#xff0c;保證服務器系統的安全運營&#xff0c;并提供靈活的通知…

Rakis: 免費基于 P2P 的去中心化的大模型

是一個開源的&#xff0c;完全在瀏覽器中運行的去中心化 AI 推理網絡&#xff0c;用戶無需服務器&#xff0c;打開即可通過點對點網絡使用 Llama-3、Mistral、Gemma-2b 等最新開源模型。 你可以通過右上角的 Scale Worker &#xff0c;下載好模型后掛機就能作為節點加入到這個…

JVM線上監控環境搭建Grafana+Prometheus+Micrometer

架構圖 一: SpringBoot自帶監控Actuator SpringBoot自帶監控功能Actuator&#xff0c;可以幫助實現對程序內部運行情況監控&#xff0c;比如監控內存狀況、CPU、Bean加載情況、配置屬性、日志信息、線程情況等。 使用步驟&#xff1a; 1. 導入依賴坐標 <dependency><…

比武招親大會

題目 郭靖夫婦在襄陽城舉辦比武招親大會&#xff0c;為女兒尋覓佳婿。比賽一共三關&#xff0c;第一關比武功。你身懷九陽神功&#xff0c;楊過使出了絕學黯然銷魂掌依然敗給了你。來自蒙古的耶律齊也不是你的對手&#xff0c;黃蓉吃驚與你的武功之高&#xff0c;打心底里為女…

海外報紙媒體投放形式分為哪些?傳播當中有什么優勢-大舍傳媒

國外報紙媒體投放新聞稿作為一種傳統而有效的傳播方式&#xff0c;依然在現代媒體環境中保持著其獨特的價值和權威性。以下幾點闡述了報紙媒體宣發的幾個關鍵方面&#xff0c;特別是當通過專業機構如大舍傳媒進行操作時&#xff1a; 權威性和公信力&#xff1a;報紙作為歷史悠久…

基于Hadoop平臺的電信客服數據的處理與分析③項目開發:搭建Kafka大數據運算環境---任務12:安裝Kafka

任務描述 任務內容為安裝和配置Kafka集群。 任務指導 Kafka是大數據生態圈中常用的消息隊列框架 具體安裝步驟如下&#xff1a; 1. 解壓縮Kafka的壓縮包 2. 配置Kafka的環境變量 3. 修改Kafka的配置文件&#xff0c;Kafka的配置文件存放在Kafka安裝目錄下的config中 4. 驗證…

擴散模型在機器學習中的應用及原理

擴散模型在機器學習中的應用及原理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 什么是擴散模型&#xff1f; 在機器學習中&#xff0c;擴散模型&#xff…

運動館預約管理系統設計

設計一個運動館預約管理系統&#xff0c;需要考慮到用戶需求、系統功能、技術實現和用戶體驗等多個方面。以下是一個基本的設計框架&#xff1a; 1. 系統目標 提供便捷的運動場地預約服務。 實現運動館資源的有效管理和利用。 支持在線支付&#xff0c;提高交易效率。 提供數…

LangChain 一 hello LLM

本來想先寫LangChain系列的&#xff0c;但是最近被AutoGen、LlamaIndex給吸引了。2023就要過去了&#xff0c;TIOBE數據編程語言排名Python都第一了&#xff0c;可見今年AI開發之熱。好吧&#xff0c;一邊學習業界通用的LangChain框架&#xff0c;一邊準備跨年吧。 前言 先是O…

使用 PostGIS 生成矢量圖塊

您喜歡視聽學習嗎&#xff1f;觀看視頻指南&#xff01; 或者直接跳到代碼 Overture Maps Foundation是由亞馬遜、Meta、微軟和 tomtom 發起的聯合開發基金會項目&#xff0c;旨在創建可靠、易于使用、可互操作的開放地圖數據。 Overture Maps 允許我們以GeoJSON格式下載開放…