日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

實時數據推送并非只有WebSocket一種選擇

來源: 責編: 時間:2023-09-28 10:08:12 362觀看
導讀環境:SpringBoot2.7.16概述在Web應用中,有幾種實時數據推送的選擇方案,包括SSE(Server-Sent Events)、WebSocket、長輪詢等。SSE是一種基于HTTP協議的服務器向客戶端推送數據的技術。它的優點是實現簡單、輕量級,對現有服務

環境:SpringBoot2.7.16CZu28資訊網——每日最新資訊28at.com

概述

在Web應用中,有幾種實時數據推送的選擇方案,包括SSE(Server-Sent Events)、WebSocket、長輪詢等。CZu28資訊網——每日最新資訊28at.com

SSE是一種基于HTTP協議的服務器向客戶端推送數據的技術。它的優點是實現簡單、輕量級,對現有服務器軟件兼容性好。但是,由于SSE是單向通信模型,只能由服務器向客戶端推送數據,對于需要客戶端向服務器發送數據的場景,SSE就無法滿足需求。CZu28資訊網——每日最新資訊28at.com

WebSocket是一種雙向通信模型,允許客戶端和服務器之間互相發送消息。它的優點是實時性強、延遲低,但是需要服務器端支持對應的協議棧,實現起來相對復雜一些。CZu28資訊網——每日最新資訊28at.com

長輪詢是對短輪詢的一種改進版本,通過在盡可能減少對服務器資源浪費的同時,保證消息的相對實時性。長輪詢在客戶端發起請求時,服務器會保持連接打開,等待一定時間后再返回響應。這樣可以減少客戶端頻繁的請求,節省帶寬和服務器資源。但是,如果服務器沒有新的消息產生,客戶端會一直等待響應,實時性就會受到一定影響。CZu28資訊網——每日最新資訊28at.com

根據實際應用場景和需求,可以選擇適合的實時數據推送方案。如果只需要服務器向客戶端推送數據,且對實時性要求不是特別高,可以選擇SSE。如果需要客戶端向服務器發送數據,或者對實時性要求較高,可以選擇WebSocket或長輪詢。當然,也可以根據實際情況將這幾種方案結合起來使用,以滿足不同的需求。CZu28資訊網——每日最新資訊28at.com

SSE與WebSocket對比

SSE(Server-Sent Events)和WebSocket都是用于實現實時通信的技術,存在關鍵差異。CZu28資訊網——每日最新資訊28at.com

通信模型:SSE是單向通信模型,只能由服務器向客戶端推送數據。而WebSocket是雙向通信模型,客戶端和服務器可以互相發送消息。CZu28資訊網——每日最新資訊28at.com

連接性:SSE使用長輪詢或HTTP流技術,需要頻繁地發起HTTP請求來獲取數據。而 WebSocket只需在握手階段建立一次連接,然后保持連接打開,減少了頻繁建立連接的開銷。CZu28資訊網——每日最新資訊28at.com

實時性:WebSocket提供了更低的延遲和更高的實時性,因為它支持雙向通信,可以立即將數據推送給客戶端。SSE雖然也可以實現實時性,但由于其單向通信模型,需要服務器定期發送數據。CZu28資訊網——每日最新資訊28at.com

協議特性:SSE是部署在HTTP協議之上的,現有的服務器軟件都支持。而WebSocket是一個新的協議,需要服務器端支持對應的協議棧。CZu28資訊網——每日最新資訊28at.com

復雜性:SSE相對WebSocket來說更輕量級,實現更簡單。WebSocket協議較復雜,實現相對困難一些。CZu28資訊網——每日最新資訊28at.com

總體來說,SSE和WebSocket都有各自的優點和適用場景。SSE輕量級且對現有服務器軟件兼容性好,而WebSocket則提供了更強的雙向通信能力和更高的實時性。CZu28資訊網——每日最新資訊28at.com

SSE簡介

SSE(Server-Sent Events)是一種用于實現服務器向客戶端實時推送數據的Web技術。與傳統的輪詢和長輪詢相比,SSE提供了更高效和實時的數據推送機制。CZu28資訊網——每日最新資訊28at.com

SSE基于HTTP協議,允許服務器將數據以事件流(Event Stream)的形式發送給客戶端??蛻舳送ㄟ^建立持久的HTTP連接,并監聽事件流,可以實時接收服務器推送的數據。CZu28資訊網——每日最新資訊28at.com

SSE的主要特點包括:CZu28資訊網——每日最新資訊28at.com

簡單易用:SSE使用基于文本的數據格式,如純文本、JSON等,使得數據的發送和解析都相對簡單。CZu28資訊網——每日最新資訊28at.com

單向通信:SSE支持服務器向客戶端的單向通信,服務器可以主動推送數據給客戶端。CZu28資訊網——每日最新資訊28at.com

實時性:SSE建立長時間的連接,使得服務器可以實時地將數據推送給客戶端,而無需客戶端頻繁地發起請求。CZu28資訊網——每日最新資訊28at.com

服務端開發

依賴管理CZu28資訊網——每日最新資訊28at.com

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

配置文件CZu28資訊網——每日最新資訊28at.com

spring:  mvc:    static-path-pattern: /**  web:    resources:      #靜態文件目錄index.html      static-locations: classpath:/templates/

接口開發CZu28資訊網——每日最新資訊28at.com

@RestController@RequestMapping("/sse")public class SseController {    // 該集合用來管理所有客戶端的連接  private final Map<String, SseEmitter> sse = new ConcurrentHashMap<>() ;  // 創建連接接口,同時指定了消息類型為text/event-stream  @GetMapping(path="/events/{id}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)  public SseEmitter createConnect(@PathVariable("id") String id) throws IOException {    SseEmitter emitter = new SseEmitter(0L);    // 每一個客戶端保存到Map中    sse.put(id, emitter) ;    // 當發生錯誤的回調    emitter.onError(ex -> {      System.err.printf("userId: %s, error: %s%n", id, ex.getMessage()) ;      sse.remove(id) ;    }) ;   // 異步請求完成后的回調    emitter.onCompletion(() -> {      sse.remove(id) ;      System.out.printf("%s, 請求完成...") ;    }) ;    // 異步請求超時回調    emitter.onTimeout(() -> {      System.err.println("超時...") ;    }) ;    return emitter;  }    // 該接口用來進行消息的發送  // 由客戶端發起請求,然后根據id獲取相應的SseEmitter進行消息的發送  @GetMapping("/sender/{id}")  public String sender(@PathVariable("id") String id) throws Exception {    SseEmitter emitter = this.sse.get(id) ;    if (emitter != null) {      try {        emitter.send( "隨機消息 - " + new Random().nextInt(10000000)) ;      } catch (Exception e) {        System.err.println("%s%n", e.getMessage()) ;      }    }    return "success" ;  }}

前端開發

前端比較簡單就是一個index.html頁面CZu28資訊網——每日最新資訊28at.com

<html>  <head>  <title>SSE</title></head><body>  <button type="button" onclick="closeSse()">Close</button>  <hr style="margin: 2px; padding: 0px 0px;"/>  <ul id="list"></ul></body><script>  const evtSource = new EventSource(`/sse/events/${Date.now()}`) ;  evtSource.onmessage = (event) => {    const newElement = document.createElement("li") ;    const eventList = document.getElementById("list") ;    newElement.innerHTML = "接收到消息: " + event.data ;    eventList.appendChild(newElement) ;  };  evtSource.onopen = (event) => {    console.log('建立連接...')  };  evtSource.onerror = (event) => {    console.error("發生錯誤:", event) ;  };  function closeSse() {    evtSource.close() ;  }</script></html>

以上就是前后端的開發,代碼非常的簡單;也就簡單的實現了由服務端實時數據推送。CZu28資訊網——每日最新資訊28at.com

EventSource對象的readyState有3個狀態值:CZu28資訊網——每日最新資訊28at.com

0 — connectingCZu28資訊網——每日最新資訊28at.com

1 — openCZu28資訊網——每日最新資訊28at.com

2 — closedCZu28資訊網——每日最新資訊28at.com

測試

圖片圖片CZu28資訊網——每日最新資訊28at.com

調用消息發送接口CZu28資訊網——每日最新資訊28at.com

圖片圖片CZu28資訊網——每日最新資訊28at.com


CZu28資訊網——每日最新資訊28at.com

圖片圖片CZu28資訊網——每日最新資訊28at.com

自定義事件類型

修改消息發送接口CZu28資訊網——每日最新資訊28at.com

@GetMapping("/sender/{id}")  public String sender(@PathVariable("id") String id) throws Exception {    SseEmitter emitter = this.sse.get(id) ;    if (emitter != null) {      SseEventBuilder builder = SseEmitter.event() ;      // 指定事件類型      builder.name("chat") ;      String msg = "隨機消息 - " + new Random().nextInt(10000000);      builder.data(msg) ;      try {        emitter.send(builder) ;      } catch (Exception e) {        e.printStackTrace();      }    }    return "success" ;  }

前端監聽具體事件類型消息CZu28資訊網——每日最新資訊28at.com

// 監聽指定事件類型消息evtSource.addEventListener("chat", (event) => {  const newElement = document.createElement("li");  const eventList = document.getElementById("list");  newElement.innerHTML = "chat message: " + event.data;  eventList.appendChild(newElement);});

注意:默認是“message”事件,因為它可以捕獲沒有 event 字段的事件, * 以及具有特定類型 `event:message` 的事件。* 它不會觸發任何其他類型的事件。CZu28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11854-0.html實時數據推送并非只有WebSocket一種選擇

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 五分鐘k8s入門到實戰-應用配置

下一篇: 學會Sequelize,讓你操作數據更絲滑!

標簽:
  • 熱門焦點
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲大胆女人| 国产精品你懂的在线| 嫩草国产精品入口| 麻豆精品在线视频| 欧美精品啪啪| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久 | 狠狠色狠狠色综合日日小说| 激情久久久久久久| 亚洲精品国产精品乱码不99| 日韩午夜av| 羞羞答答国产精品www一本| 久久亚洲综合色| 欧美男人的天堂| 国产一区二区三区久久久久久久久| 亚洲高清视频一区| 亚洲尤物影院| 久久综合网hezyo| 欧美三区美女| 曰本成人黄色| 亚洲一区二区三区欧美| 久久婷婷一区| 国产精品久久久久9999吃药| 伊人一区二区三区久久精品| 亚洲在线观看视频| 免费毛片一区二区三区久久久| 国产精品国产三级国产aⅴ浪潮| 黄色欧美日韩| 亚洲午夜免费福利视频| 老司机67194精品线观看| 国产精品久久久久久久久搜平片 | 狠狠做深爱婷婷久久综合一区| 亚洲老司机av| 久久久亚洲午夜电影| 国产精品久久久久久久第一福利 | 国产精品swag| 亚洲黄色一区二区三区| 久久av在线| 欧美午夜视频| 亚洲啪啪91| 久久久久一区二区三区| 国产精品xxxxx| 亚洲精品综合| 美女视频黄a大片欧美| 国产伦精品一区二区三区高清版| 亚洲精品资源美女情侣酒店| 久久久人成影片一区二区三区观看 | 亚洲国产精品精华液网站| 亚洲欧美电影在线观看| 欧美激情女人20p| 国产综合色产在线精品| 亚洲欧美日本精品| 欧美日韩在线免费观看| 亚洲欧洲精品一区二区三区| 久久久久成人精品| 国产欧美日韩视频一区二区三区| 宅男66日本亚洲欧美视频| 欧美成人三级在线| 一区二区在线观看视频在线观看| 午夜视频久久久| 欧美日韩网址| 99国产成+人+综合+亚洲欧美| 蜜臀va亚洲va欧美va天堂| 国精品一区二区三区| 香蕉成人久久| 国产精品免费福利| 中文日韩在线视频| 欧美日韩一区二区三区高清| 亚洲精品一品区二品区三品区| 免费观看在线综合色| 在线播放日韩| 开心色5月久久精品| 黄网站免费久久| 久久久最新网址| 激情五月婷婷综合| 久久久精品网| 黄色亚洲大片免费在线观看| 久久久国产成人精品| 国产午夜精品美女毛片视频| 欧美一级免费视频| 国产欧美精品在线| 欧美一区二区在线播放| 国产欧美一区二区三区视频| 亚洲欧美三级在线| 国产麻豆综合| 欧美在线视频一区二区| 国产日韩亚洲欧美| 久久久久久久久伊人| 伊甸园精品99久久久久久| 久久人人看视频| 在线欧美一区| 欧美国产一区二区三区激情无套| 91久久香蕉国产日韩欧美9色| 欧美第十八页| 99精品视频免费| 国产精品v日韩精品| 亚洲影院免费| 国产人妖伪娘一区91| 久久国内精品自在自线400部| 国外精品视频| 欧美freesex8一10精品| 亚洲欧洲一二三| 欧美日韩在线高清| 香蕉久久一区二区不卡无毒影院| 国产伊人精品| 免费在线欧美视频| 99www免费人成精品| 国产精品免费久久久久久| 欧美在线一二三区| 1769国内精品视频在线播放| 欧美激情1区2区3区| 一区二区激情视频| 国产女主播一区二区| 久久全球大尺度高清视频| 亚洲欧洲中文日韩久久av乱码| 欧美色大人视频| 欧美影院在线| 亚洲九九精品| 国产美女高潮久久白浆| 浪潮色综合久久天堂| 亚洲精品日产精品乱码不卡| 国产精品久久久久久久一区探花| 久久久91精品国产一区二区三区| 亚洲日本va午夜在线电影| 国产精品乱人伦中文| 久久久在线视频| 中文无字幕一区二区三区| 国产一区二区三区免费不卡 | 国产精品久久久久久久久久三级| 久久久99爱| 夜夜精品视频| 国内精品视频久久| 欧美日韩亚洲网| 久久国产精品色婷婷| 亚洲伦理久久| 国产性做久久久久久| 欧美精品1区| 欧美伊人久久大香线蕉综合69| 91久久精品视频| 国产偷国产偷亚洲高清97cao| 欧美激情综合| 久久激情综合| 一区二区三区日韩精品视频| 国内外成人在线| 国产精品video| 欧美aaa级| 欧美在线免费播放| 一区二区欧美视频| 精品电影在线观看| 国产精品欧美久久| 欧美黑人多人双交| 久久九九免费视频| 亚洲自拍偷拍网址| 亚洲国产一区视频| 国内成人精品2018免费看 | 黄色成人在线网址| 国产精品爱啪在线线免费观看| 麻豆9191精品国产| 欧美一级大片在线免费观看| 一本色道**综合亚洲精品蜜桃冫 | 国产精品国产三级国产专播品爱网 | 极品尤物久久久av免费看| 国产精品高潮视频| 欧美精品18+| 久久亚洲精品一区二区| 先锋a资源在线看亚洲| 在线视频免费在线观看一区二区| 影音先锋中文字幕一区| 国产日韩精品在线| 国产精品免费网站在线观看| 欧美人与禽性xxxxx杂性| 狂野欧美一区| 久久精品国产免费| 午夜精品福利视频| 中文一区二区| 夜夜嗨av色一区二区不卡| 91久久精品日日躁夜夜躁欧美| 影音国产精品| 国产综合视频| 国产日韩欧美成人| 国产精品一级久久久| 国产精品福利在线观看| 欧美日韩国产大片| 欧美激情综合五月色丁香小说| 裸体女人亚洲精品一区| 久久久天天操| 久久久久久噜噜噜久久久精品| 先锋影音国产精品| 亚洲一卡二卡三卡四卡五卡| 亚洲最新合集| 99精品国产一区二区青青牛奶| 亚洲欧洲三级电影| 91久久精品国产91性色| 亚洲黄网站在线观看| 亚洲国产精品久久久| 影音先锋日韩有码| 在线看片欧美| 亚洲国产激情| 亚洲国产精品第一区二区| 亚洲第一黄色网| 最近中文字幕日韩精品| 亚洲国产日韩精品| 亚洲欧洲视频在线| 亚洲美女毛片| 一区二区三区成人精品|