两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于SSE服務(wù)端的數(shù)據(jù)推送方法、系統(tǒng)、設(shè)備及介質(zhì)與流程

文檔序號:40656405發(fā)布日期:2025-01-10 19:08閱讀:2來源:國知局
基于SSE服務(wù)端的數(shù)據(jù)推送方法、系統(tǒng)、設(shè)備及介質(zhì)與流程

本發(fā)明涉及網(wǎng)絡(luò)通信,具體地說是一種基于sse服務(wù)端的數(shù)據(jù)推送方法、系統(tǒng)、設(shè)備及介質(zhì)。


背景技術(shù):

1、websocket是一種建立在tcp協(xié)議之上的網(wǎng)絡(luò)通信協(xié)議,它提供了雙向通信的能力,有效地解決了http協(xié)議的無狀態(tài)和單向通信問題。websocket的特點(diǎn)具體如下:

2、①雙向通信:websocket實(shí)現(xiàn)了服務(wù)器與客戶端之間的雙向通信,即服務(wù)器可以主動向客戶端推送信息,客戶端也可以主動向服務(wù)器發(fā)送信息。

3、②持久連接:一旦websocket連接建立,它將持續(xù)存在,直到被顯式關(guān)閉。這種持久連接避免了http請求/響應(yīng)模式中的頻繁握手和斷開連接的開銷。

4、③高效性:websocket使用較少的開銷來維持連接,并且數(shù)據(jù)格式輕量,性能開銷小,通信高效。

5、④兼容性和靈活性:websocket與http協(xié)議有著良好的兼容性,默認(rèn)端口也是80和443,并且握手階段采用http協(xié)議。此外,websocket可以發(fā)送文本和二進(jìn)制數(shù)據(jù),并且沒有同源限制。

6、http協(xié)議,全稱hyper?text?transfer?protocol(超文本傳輸協(xié)議),是用于從萬維網(wǎng)(www)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。http是一個(gè)基于tcp/ip通信協(xié)議來傳遞數(shù)據(jù)的協(xié)議,它屬于應(yīng)用層協(xié)議,并且是一個(gè)面向?qū)ο蟮膮f(xié)議。http協(xié)議工作于客戶端-服務(wù)端架構(gòu)之上,瀏覽器作為http客戶端通過url向http服務(wù)端(即web服務(wù)器)發(fā)送所有請求,web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。

7、傳統(tǒng)的http協(xié)議是請求-響應(yīng)模型,無法實(shí)現(xiàn)服務(wù)器主動向客戶端推送數(shù)據(jù)。websocket雖然提供了雙向通信能力,但在某些僅需要單向通信的場景下顯得過于復(fù)雜且資源消耗較大。


技術(shù)實(shí)現(xiàn)思路

1、本發(fā)明的技術(shù)任務(wù)是提供一種基于sse服務(wù)端的數(shù)據(jù)推送方法、系統(tǒng)、設(shè)備及介質(zhì),來解決現(xiàn)有技術(shù)中websocket在單向通信場景下的資源浪費(fèi)的問題。

2、本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,一種基于sse服務(wù)端的數(shù)據(jù)推送方法,該方法具體如下:

3、服務(wù)器端響應(yīng)客戶端的get請求,設(shè)置響應(yīng)頭content-type為text/event-stream,cache-control為no-cache,connection為keep-alive,建立持久的http連接;

4、數(shù)據(jù)更新時(shí),服務(wù)器端通過持久的http連接向客戶端發(fā)送事件流;

5、客戶端使用fetch或eventsource對象監(jiān)聽并處理接收到的事件流。

6、作為優(yōu)選,事件流包括事件類型、事件id、數(shù)據(jù)內(nèi)容以及可選的重試時(shí)間;

7、不同事件之間通過僅包含回車符和換行符的空行(\r\n\r\n)分隔。

8、作為優(yōu)選,服務(wù)器端記錄并發(fā)送每個(gè)事件的id,客戶端在連接中斷后重新連接時(shí),通過http頭last-event-id發(fā)送最近接收到的事件id,實(shí)現(xiàn)數(shù)據(jù)的同步。

9、作為優(yōu)選,客戶端使用fetch或eventsource對象監(jiān)聽并處理接收到的事件流具體如下:

10、發(fā)起請求:客戶端向服務(wù)器發(fā)送一個(gè)帶有指定header的get請求,表示接收事件流類型,并禁用任何的事件緩存;

11、接收數(shù)據(jù):客戶端使用javascript的eventsource對象監(jiān)聽服務(wù)器發(fā)送的事件流;當(dāng)有新事件到達(dá)時(shí),eventsource對象根據(jù)事件類型觸發(fā)相應(yīng)的事件處理函數(shù);

12、錯(cuò)誤處理與重連:客戶端通過監(jiān)聽onerror事件處理連接錯(cuò)誤,并在必要時(shí)自動重連。

13、作為優(yōu)選,所述服務(wù)器端實(shí)現(xiàn)sse遵循的規(guī)范具體如下:

14、設(shè)置sse相關(guān)的響應(yīng)頭(事件流、長連接、chunk傳輸-事件流自帶及禁用緩存);情況如下:

15、設(shè)置響應(yīng)頭res.setheader("content-type","text/event-stream;char?set=utf-8"),服務(wù)器端響應(yīng)數(shù)據(jù)類型為text/event-stream的事件流;

16、設(shè)置響應(yīng)頭res.setheader("connection","keep-alive"),客戶端與服務(wù)端之間建立一個(gè)keep-alive長連接;響應(yīng)內(nèi)容會被分割為多個(gè)塊(chunks)進(jìn)行傳輸;

17、將數(shù)據(jù)封裝為事件(event)按照設(shè)定格式發(fā)送給客戶端;

18、設(shè)置相應(yīng)的延遲和緩沖控制發(fā)送時(shí)機(jī)(適用于動態(tài)生成內(nèi)容和大數(shù)據(jù)傳輸);

19、在設(shè)定時(shí)間斷開客戶端連接。

20、更優(yōu)地,客戶端使用fetch方法調(diào)用服務(wù)的接口和/或see,具體如下:

21、獲取可讀流(readablestream)對象res.body;

22、獲取一個(gè)讀取器(reader)對象res.body.getreader();

23、通過reader.read()方法,異步讀取響應(yīng)體的內(nèi)容(readablestreamdefaultreader);

24、將數(shù)據(jù)流轉(zhuǎn)換為utf-8字符串;

25、根據(jù)事件流的規(guī)范以\n為根據(jù)拆分字段數(shù)據(jù);

26、持續(xù)讀取數(shù)據(jù)流,等待服務(wù)端斷開或者手動關(guān)閉。

27、一種基于sse服務(wù)端的數(shù)據(jù)推送系統(tǒng),該系統(tǒng)包括服務(wù)器端和客戶端,服務(wù)器端響應(yīng)客戶端的get請求,設(shè)置響應(yīng)頭content-type為text/event-stream,cache-control為no-cache,connection為keep-alive,建立持久的http連接;數(shù)據(jù)更新時(shí),服務(wù)器端通過持久的http連接向客戶端發(fā)送事件流;客戶端使用fetch或eventsource對象監(jiān)聽并處理接收到的事件流。

28、作為優(yōu)選,所述服務(wù)器端實(shí)現(xiàn)sse遵循的規(guī)范具體如下:

29、設(shè)置sse相關(guān)的響應(yīng)頭(事件流、長連接、chunk傳輸-事件流自帶及禁用緩存);情況如下:

30、設(shè)置響應(yīng)頭res.setheader("content-type","text/event-stream;char?set=utf-8"),服務(wù)器端響應(yīng)數(shù)據(jù)類型為text/event-stream的事件流;

31、設(shè)置響應(yīng)頭res.setheader("connection","keep-alive"),客戶端與服務(wù)端之間建立一個(gè)keep-alive長連接;響應(yīng)內(nèi)容會被分割為多個(gè)塊(chunks)進(jìn)行傳輸;

32、將數(shù)據(jù)封裝為事件(event)按照設(shè)定格式發(fā)送給客戶端;

33、設(shè)置相應(yīng)的延遲和緩沖控制發(fā)送時(shí)機(jī)(適用于動態(tài)生成內(nèi)容和大數(shù)據(jù)傳輸);

34、在設(shè)定時(shí)間斷開客戶端連接;

35、所述客戶端使用fetch或eventsource對象監(jiān)聽并處理接收到的事件流具體如下:

36、發(fā)起請求:客戶端向服務(wù)器發(fā)送一個(gè)帶有指定header的get請求,表示接收事件流類型,并禁用任何的事件緩存;

37、接收數(shù)據(jù):客戶端使用javascript的eventsource對象監(jiān)聽服務(wù)器發(fā)送的事件流;當(dāng)有新事件到達(dá)時(shí),eventsource對象根據(jù)事件類型觸發(fā)相應(yīng)的事件處理函數(shù);

38、錯(cuò)誤處理與重連:客戶端通過監(jiān)聽onerror事件處理連接錯(cuò)誤,并在必要時(shí)自動重連;

39、所述客戶端使用fetch方法調(diào)用服務(wù)的接口和/或see,具體如下:

40、獲取可讀流(readablestream)對象res.body;

41、獲取一個(gè)讀取器(reader)對象res.body.getreader();

42、通過reader.read()方法,異步讀取響應(yīng)體的內(nèi)容(readablestreamdefaultreader);

43、將數(shù)據(jù)流轉(zhuǎn)換為utf-8字符串;

44、根據(jù)事件流的規(guī)范以\n為根據(jù)拆分字段數(shù)據(jù);

45、持續(xù)讀取數(shù)據(jù)流,等待服務(wù)端斷開或者手動關(guān)閉。

46、其中,server-sent?events(sse)作為一種輕量級的替代方案,利用http協(xié)議的長連接特性,實(shí)現(xiàn)了服務(wù)器向客戶端的實(shí)時(shí)數(shù)據(jù)推送,具有實(shí)現(xiàn)簡單、資源消耗少、兼容性好等優(yōu)點(diǎn)。

47、一種電子設(shè)備,包括:存儲器和至少一個(gè)處理器;

48、其中,所述存儲器上存儲有計(jì)算機(jī)程序;

49、所述至少一個(gè)處理器執(zhí)行所述存儲器存儲的計(jì)算機(jī)程序,使得所述至少一個(gè)處理器執(zhí)行如上述的基于sse服務(wù)端的數(shù)據(jù)推送方法。

50、一種計(jì)算機(jī)可讀存儲介質(zhì),所述計(jì)算機(jī)可讀存儲介質(zhì)中存儲有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序可被處理器執(zhí)行以實(shí)現(xiàn)如上述的基于sse服務(wù)端的數(shù)據(jù)推送方法。

51、本發(fā)明的基于sse服務(wù)端的數(shù)據(jù)推送方法、系統(tǒng)、設(shè)備及介質(zhì)具有以下優(yōu)點(diǎn):

52、(一)本發(fā)明旨在提供一種輕量級、高效的實(shí)時(shí)數(shù)據(jù)通信解決方案,sse作為一種基于http?1.1的服務(wù)器推送技術(shù),通過get請求建立長連接,允許服務(wù)器主動向客戶端推送數(shù)據(jù),具有輕量、移植性高和簡單易用的特點(diǎn),適用于需要實(shí)時(shí)數(shù)據(jù)更新的應(yīng)用場景,如股票價(jià)格更新、新聞實(shí)時(shí)推送等;

53、(二)本發(fā)明通過sse技術(shù)實(shí)現(xiàn)了服務(wù)器向客戶端的高效、實(shí)時(shí)數(shù)據(jù)推送,具有以下優(yōu)點(diǎn):

54、①高效性:相比websocket,sse在單向通信場景下更為高效,減少了不必要的資源消耗;

55、②簡便性:實(shí)現(xiàn)簡單,客戶端和服務(wù)端代碼量少,易于部署和維護(hù);

56、③兼容性好:基于http協(xié)議,兼容大多數(shù)現(xiàn)代瀏覽器,無需額外配置或插件。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
高唐县| 金门县| 沙洋县| 西峡县| 湖北省| 富川| 正蓝旗| 分宜县| 长宁县| 黄冈市| 乌审旗| 冷水江市| 安康市| 景东| 江源县| 新巴尔虎左旗| 邵阳市| 塘沽区| 怀柔区| 闻喜县| 永吉县| 英超| 甘肃省| 万年县| 江西省| 正定县| 宜州市| 儋州市| 饶阳县| 于都县| 邢台县| 桐乡市| 札达县| 黑水县| 南丰县| 乌恰县| 云林县| 齐河县| 漾濞| 东丽区| 衡水市|