欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

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

【JavaScript】JS實(shí)時(shí)通信方式之eventSource

admin
2024年6月15日 11:1 本文熱度 968

1、前言

目前JS實(shí)時(shí)通信方式主要由:websocket、socket.io、eventSource(SSE)這三種方式。有人就也許好奇有了websocket這種實(shí)時(shí)通信方式,為啥還需要eventSource呢?這是因?yàn)椴煌蛻?hù)端場(chǎng)景,有著各自的優(yōu)勢(shì)。

eventSource是單向通信,而websocket是雙向通信。在新聞推送、股票行情這種只需要服務(wù)器發(fā)送消息給客戶(hù)端場(chǎng)景,使用SSE更加合適,另外SSE是使用HTTP傳輸?shù)摹6鴚ebsocket要求全雙工連接和一個(gè)新的websocket服務(wù)器去處理,

因?yàn)楦饔兴L(zhǎng),我們只需要根據(jù)實(shí)際應(yīng)用場(chǎng)景,去選擇最優(yōu)的應(yīng)用方案。

2、介紹

EventSource 對(duì)象接口用于接收服務(wù)器發(fā)送的事件。它通過(guò) HTTP 連接到服務(wù)器,已 text/event-stream 格式接收事件,不關(guān)閉連接。

EventSource 對(duì)象主要用于 Server-Sent Events(簡(jiǎn)稱(chēng) SSE)的技術(shù)。這是一種能讓瀏覽器通過(guò) HTTP 連接自動(dòng)收到服務(wù)器端更新的技術(shù)。

這個(gè)技術(shù)的作用是可以完成從服務(wù)器端到客戶(hù)端(瀏覽器)單向的消息傳遞。因此我們可以用這個(gè)來(lái)做推送。

相關(guān)文檔:https://developer.mozilla.org/zh-CN/docs/Web/API/EventSource

2.1瀏覽器兼容性

2.2構(gòu)造函數(shù)

const eventSource = new EventSource()

2.3屬性

說(shuō)明屬性
onerror當(dāng)發(fā)生錯(cuò)誤時(shí)被調(diào)用,并且在此對(duì)象上派發(fā) error 事件
onmessage服務(wù)器端發(fā)送給客戶(hù)端一條消息時(shí)觸發(fā)
onopenSSE 連接剛打開(kāi)時(shí)觸發(fā)
readyState表示連接狀態(tài)(CONNECTING 、OPEN 和 CLOSED
url代表源頭的 URL

2.4方法

方法說(shuō)明
close關(guān)閉連接

2.5通信過(guò)程


在瀏覽器通信截圖:


2.6服務(wù)端

服務(wù)端返回響應(yīng)頭必須包含以下header:

Content-Type: text/event-steam 

Cache-Control: no-cache

Connection: keep-alive

服務(wù)器返回的數(shù)據(jù)格式為文本型,由若干個(gè)message組成,每個(gè)message用\n\n分割

每個(gè)message內(nèi)容是[key]:value

key有四種情況:id、event(type)、data、tetry

  • id 為每個(gè)返回?cái)?shù)據(jù)的唯一標(biāo)識(shí),瀏覽器用lastEventId讀取id,一旦連接斷開(kāi),瀏覽器會(huì)從新發(fā)送http請(qǐng)求,帶有特殊請(qǐng)求頭Last-Event-Id,代表斷開(kāi)時(shí)的id,用于建立重新連接,屬于一種重連的同步機(jī)制.

  • data 數(shù)據(jù)內(nèi)容一般放于data字段。

  • event(type):消息類(lèi)型,一般默認(rèn)為message,服務(wù)端可以自定義,前端用addEventListener()監(jiān)聽(tīng)。

  • retry:代表服務(wù)器重新發(fā)送請(qǐng)求的間隔時(shí)間。

3、實(shí)例運(yùn)用

3.1原生EventSource

/*

* new EventSource(url, configuration)

* url:請(qǐng)求地址路徑

* configuration 可選項(xiàng):withCredentials,默認(rèn)為false,指是否CORS設(shè)置

*

*/

const eventSource = new EventSource('/api/stream');

// 正常的EventSource,我們只關(guān)心以下三個(gè)事件

/*

* open:訂閱成功(和后端連接成功)

*/

eventSource.addEventListener("open", function(e) {

  console.log('open successfully')

})

/*

* message:后端返回信息,格式可以和后端協(xié)商

*/

eventSource.addEventListener("message", function(e) {

  console.log(e.data)

})

/*

* error:錯(cuò)誤(可能是斷開(kāi),可能是后端返回的信息)

*/

eventSource.addEventListener("error", function(err) {

  console.log(err)

  // 類(lèi)似的返回信息驗(yàn)證,這里是實(shí)例

  err && err.status === 401 && console.log('not authorized')

})


// 需要關(guān)閉了

eventSource.close()

注意:因?yàn)樵鶨ventSource無(wú)法進(jìn)行自定義配置,例如header、method等,因此我們需要引用其他的封裝庫(kù)

3.2fetch-event-source

使用post的方式請(qǐng)求eventSource

安裝依賴(lài):npm install --save @rangermauve/fetch-event-source

import { fetchEventSource } from '@microsoft/fetch-event-source'


fetchEventSource('/api/stream', {

  method: 'POST',

  headers: {

    'Content-Type': 'application/json'

  },

  body: JSON.stringify(dataJson),

  onopen() {},

  onmessage(event) {

    const jsonData = JSON.parse(event.data)

    let respondTexts = jsonData.delta

    let finishStatus = jsonData.finished

  },

  onerror() {},

  onclose() {}

})


該文章在 2024/6/15 11:03:32 編輯過(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