国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?

這篇具有很好參考價值的文章主要介紹了服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

當(dāng)涉及到推送數(shù)據(jù)時,人們首先會想到 WebSocket。

的確,WebSocket 允許雙向通信,可以自然地用于服務(wù)器到瀏覽器的消息推送。

然而,如果只需要單向的消息推送,HTTP 通過服務(wù)器發(fā)送的事件也有這種功能。

WebSocket 的通信過程如下:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

首先,通過 HTTP 切換協(xié)議。服務(wù)器返回 101 狀態(tài)碼后,協(xié)議切換成功。

然后,開始以 WebSocket 格式的數(shù)據(jù)通信,任意一方都可以隨時向另一方推送消息。

至于 HTTP 中的服務(wù)器發(fā)送的事件:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

服務(wù)器返回的 Content-Typetext/event-stream,這是一種可以多次返回內(nèi)容的流。

服務(wù)器發(fā)送的事件通過這種類型的消息隨時推送數(shù)據(jù)。

你可能是第一次聽說 SSE,但你已經(jīng)使用過基于它的應(yīng)用程序。

例如,你使用的 CI/CD 平臺會實時打印日志。

那么它如何實時傳輸構(gòu)建日志呢?

它需要分次傳輸,SSE 通常用于以這種方式推送數(shù)據(jù)。

另一個例子是 ChatGPT。它在回答問題時不會一次給你所有答案,而是逐步分塊加載。

這也是基于 SSE 的。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

現(xiàn)在我們已經(jīng)知道 SSE 是什么以及它的應(yīng)用,讓我們自己實現(xiàn)它。

創(chuàng)建一個 Nest 項目。

npx nest new sse-test

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

運行它:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

訪問 http://localhost:3000 會顯示“Hello World”,表示服務(wù)器運行成功。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

然后在 AppController 中添加一個流接口。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

這里沒有用 @Get、@Post 等裝飾器進(jìn)行標(biāo)識,而是 @Sse 裝飾器表示這是一個事件流類型的接口。

@Sse('stream')
stream() {
    return new Observable((observer) => {
      observer.next({ data: { msg: 'aaa'} });

      setTimeout(() => {
        observer.next({ data: { msg: 'bbb'} });
      }, 2000);

      setTimeout(() => {
        observer.next({ data: { msg: 'ccc'} });
      }, 5000);
    });
}

返回的是 Observable 對象,然后在內(nèi)部使用 observer.next 返回消息。可以返回任何 JSON 數(shù)據(jù)。我們首先返回 aaa,2 秒后返回 bbb,5 秒后返回 ccc。然后創(chuàng)建一個前端頁面:創(chuàng)建一個 React 項目。

npx create-react-app --template=typescript sse-test-frontend

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

App.tsx 中編寫以下代碼:

import { useEffect } from 'react';

function App() {

  useEffect(() => {
    const eventSource = new EventSource('http://localhost:3000/stream');
    eventSource.onmessage = ({ data }) => {
      console.log('New message', JSON.parse(data));
    };
  }, []);

  return (
    <div>hello</div>
  );
}

export default App;

這個 EventSource 是瀏覽器的原生 API,用于獲取 SSE 接口的響應(yīng)。它會將每個消息傳入回調(diào)函數(shù) onmessage 中。

我們在 Nest 服務(wù)中啟用跨域支持。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

然后刪除 react 項目中的 index.tsx 文件中的這幾行代碼,因為它們會導(dǎo)致額外的渲染:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

執(zhí)行 npm run start

因為 3000 端口被占用,它將在 3001 上運行:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

訪問瀏覽器:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

看到響應(yīng)了嗎?

這就是服務(wù)器發(fā)送的事件。

devtools 中,你可以看到響應(yīng)的 Content-Typetext/event-stream。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

然后在 EventStream 中,你可以看到接收到的每條消息。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

通過這種方式,服務(wù)器可以隨時向網(wǎng)頁推送消息。

它的兼容性如何?

你可以在 MDN 上看到。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

除了 IE 和 Edge 外,與其他瀏覽器沒有兼容問題。

一般來說,安全使用。

它可以在哪里使用?

服務(wù)器發(fā)送的事件 特別適合只需要服務(wù)器端推送的場景。

例如日志的實時推送。

讓我們測試一下:

“tail -f”命令允許你實時查看文件的最新內(nèi)容。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

我們使用 child_process 模塊的 exec 函數(shù)來執(zhí)行這個命令,然后監(jiān)聽它的 stdout 輸出。

const { exec } = require("child_process");

const childProcess = exec('tail -f ./log');

childProcess.stdout.on('data', (msg) => {
    console.log(msg);
});

使用 node 執(zhí)行它。

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

然后添加一個 SSE 接口。

@Sse('stream2')
stream2() {
const childProcess = exec('tail -f ./log');

return new Observable((observer) => {
  childProcess.stdout.on('data', (msg) => {
    observer.next({ data: { msg: msg.toString() }});
  })  
});

檢測到新數(shù)據(jù)后,返回到瀏覽器。

瀏覽器連接到這個新接口:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

測試如下:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

可以看到瀏覽器已經(jīng)接收到實時日志。

許多構(gòu)建日志都是通過 SSE 實時推送的。

日志和類似的東西只是文本,但是如果是二進(jìn)制數(shù)據(jù)呢?

在 Node.js 中,二進(jìn)制數(shù)據(jù)存儲在 Buffer 中。

const { readFileSync } = require("fs");

const buffer = readFileSync('./package.json');

console.log(buffer); 

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

Buffer 有一個 toJSON 方法:

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

這可以通過 SSE 接口返回嗎?

試一下:

@Sse('stream3')  
stream3() {
    return new Observable((observer) => {
        const json = readFileSync('./package.json').toJSON();
        observer.next({ data: { msg: json }});
    });
}

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?,服務(wù)器,websocket,運維

的確可以。

換句話說,基于 SSE,除了可以推送文本,還可以推送任何二進(jìn)制數(shù)據(jù)。

概括

可以使用 WebSocket 或 HTTP 的服務(wù)器發(fā)送事件(SSE)從服務(wù)器推送實時數(shù)據(jù)。

通過在 HTTP 響應(yīng)中返回一個 Content-Type 為 text/event-stream 的頭,可以通過流多次發(fā)送消息。

傳輸?shù)膬?nèi)容是 JSON 格式,可以用來傳輸文本或二進(jìn)制內(nèi)容。

我們使用 Nest 實現(xiàn)了 SSE 接口。方法使用 @Sse 裝飾器進(jìn)行注釋,它返回一個 Observable 對象??梢允褂?observer.next 隨時返回數(shù)據(jù)。

在前端,使用 EventSource 的 onmessage 來接收消息。

這個 API 在除 IE 和 Edge 外的其他瀏覽器有很好的兼容性,可以安全使用。

它有各種應(yīng)用,如內(nèi)部消息傳遞、構(gòu)建日志的實時顯示和 chatgpt 的消息響應(yīng)。

當(dāng)遇到需要消息推送的場景時,考慮使用服務(wù)器發(fā)送的事件而不是 WebSocket。文章來源地址http://www.zghlxwxcb.cn/news/detail-800504.html

到了這里,關(guān)于服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Unity使用webSocket與服務(wù)器通信(三)——C#服務(wù)端(Fleck)與Unity客戶端( NativeWebSocket)傳輸多種數(shù)據(jù)數(shù)據(jù)

    Unity使用webSocket與服務(wù)器通信(三)——C#服務(wù)端(Fleck)與Unity客戶端( NativeWebSocket)傳輸多種數(shù)據(jù)數(shù)據(jù)

    1、字符串?dāng)?shù)據(jù) 簡單的字符串:比如登錄請求信息,登錄結(jié)果返回的信息。 用json系列化的字符串:比如上傳一個表到服務(wù)器,讓它寫入到數(shù)據(jù)庫中。 讀取文件的時候,讀取的是string內(nèi)容。 2、二進(jìn)制數(shù)據(jù) 比如傳輸?shù)氖俏募豪鏼yword.doc,myexcel.xls或者是assetboundle文件。 比如

    2023年04月08日
    瀏覽(24)
  • SSE(服務(wù)器推送事件)規(guī)范

    SSE 是指 \\\"Server-Sent Events\\\",即服務(wù)器推送事件。它是一種基于 HTTP 的服務(wù)器推送技術(shù),允許服務(wù)器實時向客戶端推送數(shù)據(jù)。SSE 規(guī)范定義了一種在客戶端和服務(wù)器之間單向?qū)崟r通信的方式,通常用于實現(xiàn)服務(wù)器向客戶端推送更新、通知或?qū)崟r數(shù)據(jù)。 使用 SSE,客戶端可以通過簡單

    2024年01月18日
    瀏覽(47)
  • git 新建 branch 推送 到服務(wù)器

    通常情況下,需要開發(fā)一個模塊,從 master 新建立了一個 分支,newbranch,如果推送到服務(wù)器; 1:從遠(yuǎn)程 master 建立本地分支 newbranch; ? ? git checkout -b newbranch origin/master 2:當(dāng)修改完成代碼,add,commit 完成后,執(zhí)行 git push; 提示: git push? 的全部參數(shù): git push 遠(yuǎn)程主機(jī)名 本地

    2024年02月07日
    瀏覽(19)
  • 【GIT】代碼倉庫服務(wù)器變更本地修改并推送

    author: jwensh date: 20231122 沒有使用域名的 gitlb 服務(wù)器搬移(IP地址變了), 以至于 gitlab 管理的項目無法進(jìn)行連接及推送。因為涉及到多個項目工程,所以可以用本地配置修改的方式來進(jìn)行重新關(guān)聯(lián)( 這種修改 remote 的方式適用于多個平臺代碼倉庫間同步代碼 ) old_ip:http://

    2024年02月03日
    瀏覽(19)
  • Springboot集成Docker并將鏡像推送linux服務(wù)器

    Springboot集成Docker并將鏡像推送linux服務(wù)器

    案例使用springboot項目,在IDEA 中集成Docker生成鏡像,并將鏡像發(fā)布到linux服務(wù)器 具體步驟如下: 更新系統(tǒng)的軟件包列表 安裝Docker所需的軟件包和依賴項: 完成安裝后,啟動Docker服務(wù)。在終端中運行以下命令: 驗證Docker是否成功安裝。在終端中運行以下命令: linux查看docke

    2024年02月09日
    瀏覽(25)
  • 【Spring Boot 實現(xiàn) WebSocket實時數(shù)據(jù)推送-服務(wù)端】

    【Spring Boot 實現(xiàn) WebSocket實時數(shù)據(jù)推送-服務(wù)端】

    一、WebSocket配置類 二、WebSocket服務(wù)端類 三、WebSocket的連接池類 四、啟動Spring Boot服務(wù) 五、測試WebSocket連接 WebSocket在線測試工具: http://www.easyswoole.com/wstool.html 測試連接 服務(wù)地址:ws://172.18.42.29:14785/endPoint/1 服務(wù)啟動的IP:172.18.42.29 服務(wù)端口:14785 WS的URl:/endPoint 入?yún)ⅲ? 六

    2023年04月25日
    瀏覽(32)
  • 企業(yè)微信消息推送(一)接收消息服務(wù)器URL

    企業(yè)微信消息推送(一)接收消息服務(wù)器URL

    1.點擊左上角頭像,打開微信管理平臺 2.創(chuàng)建應(yīng)用 3.獲取五個參數(shù) 3.1獲取應(yīng)用的AgentId、Secret 3.2獲取企業(yè)ID 配置接收消息服務(wù)器URL 企業(yè)微信限制過多,公司域名所有權(quán)檢驗不通過。采用接收消息服務(wù)器URL的方式。 3.3 獲取token、EncodingAESKey 4.1 內(nèi)網(wǎng)穿透、本地開發(fā) 先將請求打到

    2024年02月04日
    瀏覽(21)
  • 【ASP.NET Core】使用SignalR推送服務(wù)器日志

    【ASP.NET Core】使用SignalR推送服務(wù)器日志

    一個多月前接手了一個產(chǎn)線機(jī)器人項目,上位機(jī)以讀寫寄存器的方式控制機(jī)器人,服務(wù)器就是用 ASP.NET Core 寫的 Web API。由于前一位開發(fā)者寫的代碼質(zhì)量問題,導(dǎo)致上位機(jī)需要16秒才能啟動。經(jīng)過我近一個月的改造,除了保留業(yè)務(wù)邏輯代碼,其他的基本重寫。如今上位機(jī)的啟動

    2024年02月03日
    瀏覽(23)
  • 【10秒開服】幻獸帕魯全自動部署教程,難道你還想手動搭建游戲服務(wù)器嗎?快來學(xué)習(xí)這個簡單又快速的方法!

    【10秒開服】幻獸帕魯全自動部署教程,難道你還想手動搭建游戲服務(wù)器嗎?快來學(xué)習(xí)這個簡單又快速的方法!

    在帕魯?shù)氖澜?,你可以選擇與神奇的生物「帕魯」一同享受悠閑的生活,也可以投身于與偷獵者進(jìn)行生死搏斗的冒險。帕魯可以進(jìn)行戰(zhàn)斗、繁殖、協(xié)助你做農(nóng)活,也可以為你在工廠工作。你也可以將它們進(jìn)行售賣,或肢解后食用。 引用自:https://store.steampowered.com/app/1623730/P

    2024年02月19日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包