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

介紹Server-Sent Events,以及使用,超級(jí)簡(jiǎn)單!

這篇具有很好參考價(jià)值的文章主要介紹了介紹Server-Sent Events,以及使用,超級(jí)簡(jiǎn)單!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、SSE 的本質(zhì)

嚴(yán)格地說,HTTP 協(xié)議無法做到服務(wù)器主動(dòng)推送信息。但是,有一種變通方法,就是服務(wù)器向客戶端聲明,接下來要發(fā)送的是流信息(streaming)。

也就是說,發(fā)送的不是一次性的數(shù)據(jù)包,而是一個(gè)數(shù)據(jù)流,會(huì)連續(xù)不斷地發(fā)送過來。這時(shí),客戶端不會(huì)關(guān)閉連接,會(huì)一直等著服務(wù)器發(fā)過來的新的數(shù)據(jù)流,視頻播放就是這樣的例子。本質(zhì)上,這種通信就是以流信息的方式,完成一次用時(shí)很長(zhǎng)的下載。

SSE 就是利用這種機(jī)制,使用流信息向?yàn)g覽器推送信息。它基于 HTTP 協(xié)議,目前除了 IE/Edge,其他瀏覽器都支持。

二、SSE 的特點(diǎn)

SSE 與 WebSocket 作用相似,都是建立瀏覽器與服務(wù)器之間的通信渠道,然后服務(wù)器向?yàn)g覽器推送信息。

總體來說,WebSocket 更強(qiáng)大和靈活。因?yàn)樗侨p工通道,可以雙向通信;SSE 是單向通道,只能服務(wù)器向?yàn)g覽器發(fā)送,因?yàn)榱餍畔⒈举|(zhì)上就是下載。如果瀏覽器向服務(wù)器發(fā)送信息,就變成了另一次 HTTP 請(qǐng)求。
介紹Server-Sent Events,以及使用,超級(jí)簡(jiǎn)單!,spring boot

三、SSE 和WebSocket 區(qū)別

1、SSE 使用 HTTP 協(xié)議,現(xiàn)有的服務(wù)器軟件都支持。WebSocket 是一個(gè)獨(dú)立協(xié)議。
2、SSE 屬于輕量級(jí),使用簡(jiǎn)單;WebSocket 協(xié)議相對(duì)復(fù)雜。
3、SSE 默認(rèn)支持?jǐn)嗑€重連,WebSocket 需要自己實(shí)現(xiàn)。
4、SSE一般只用來傳送文本,二進(jìn)制數(shù)據(jù)需要編碼后傳送,WebSocket 默認(rèn)支持傳送二進(jìn)制數(shù)據(jù)。
5、SSE 支持自定義發(fā)送的消息類型。
因此,兩者各有特點(diǎn),適合不同的場(chǎng)合。

四、使用

SSE后端代碼
SpringMVC中,已經(jīng)集成了該功能,所以無需額外引入jar包,直接上代碼:


@Slf4j
@RestController
@RequestMapping("/sse")
public class SseController {

    private static final Map<String, SseEmitter> SSE_CACHE = new ConcurrentHashMap<>();

    /**
     * 建立連接
     */
    @GetMapping("/connect/{driverId}")
    public SseEmitter connect(@PathVariable String driverId) {
        log.info("司機(jī)ID:{}", driverId);
        SseEmitter sseEmitter = new SseEmitter(0L);
        //注入監(jiān)聽對(duì)象
        SSE_CACHE.put(driverId,sseEmitter);
        return sseEmitter;
    }
    
    /**
     * 推送消息
     */
    @GetMapping("/push")
    public String push(@RequestParam String driverId,@RequestParam String content){
        try {
             SseEmitter sseEmitter = SSE_CACHE.get(driverId);
            if (null == sseEmitter) {
                return "連接斷開,請(qǐng)重新建立連接";
            }
            sseEmitter.send(content);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return "給用戶:" + driverId + ",發(fā)送了消息:" + content;
    }

    /**
     * 斷開連接
     */
    @GetMapping(path = "over")
    public String over(String driverId) {
        SseEmitter sseEmitter = SSE_CACHE.get(driverId);
        if (sseEmitter != null) {
            sseEmitter.complete();
            SSE_CACHE.remove(driverId);
        }
        return "over";
    }

}

前端代碼,簡(jiǎn)單測(cè)試

<html lang="en">
<head>
    <meta charset="UTF-8">
</head>

<body>
<h1>司機(jī)監(jiān)聽測(cè)試頁面-模擬司機(jī)客戶端</h1>
<button onclick="setMegContent('鼠標(biāo)點(diǎn)我了')">測(cè)試meg展示</button>
<div id="message">展示服務(wù)的推送過來消息的地方</br></div>

<script>
    driverId = 1;
    if (window.EventSource) {
        console.info("此瀏覽器支持SSE")

        source = new EventSource("http://localhost:7000/sse/connect/" + driverId)
        source.onmessage = function (event) {
            setMegContent(event.data);
        };
    } else {
        setMegContent("此瀏覽器不支持SSE")
    }

    function setMegContent(content) {
        document.getElementById("message").innerHTML += (content + '</br>');
    }
</script>


</body>


</html>

效果:
介紹Server-Sent Events,以及使用,超級(jí)簡(jiǎn)單!,spring boot文章來源地址http://www.zghlxwxcb.cn/news/detail-666656.html

到了這里,關(guān)于介紹Server-Sent Events,以及使用,超級(jí)簡(jiǎn)單!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • ChatGLM-6B之SSE通信(Server-sent Events)

    ChatGLM-6B之SSE通信(Server-sent Events)

    寫這篇博客還是很激動(dòng)開心的,因?yàn)槭俏医?jīng)過兩周的時(shí)間,查閱各個(gè)地方的資料,經(jīng)過不斷的代碼修改,不斷的上傳到有顯卡的服務(wù)器運(yùn)行才得出的可行的接口調(diào)用解決方案,在這里記錄并分享一下。 ?????????起初領(lǐng)導(dǎo)讓我寫一個(gè)接口——前端傳遞用戶問題,后端返回

    2024年02月06日
    瀏覽(25)
  • 前端Server-Sent Events(SSE)請(qǐng)求如何用post

    現(xiàn)在非常流行AI問答,AI回答的時(shí)候一般都是流式輸出,一個(gè)字幾個(gè)字幾個(gè)字地慢慢加載完,要實(shí)現(xiàn)這個(gè)效果,我們一般可以用WebSocket和Server-Sent來實(shí)現(xiàn)。 我會(huì)選擇使用SSE,為什么不用WebSocket呢? 1.?WebSocket是雙向通信,這個(gè)功能只需要服務(wù)器一直向我們輸出。 2.SSE是一個(gè)htt

    2024年02月02日
    瀏覽(35)
  • Go 中的Server-Sent Events:一種高效的實(shí)時(shí)通信替代方案

    在當(dāng)今的軟件工程領(lǐng)域,實(shí)時(shí)通信在許多現(xiàn)代應(yīng)用程序中發(fā)揮著至關(guān)重要的作用。Server-Sent Events (SSE) 是該領(lǐng)域廣受歡迎的一項(xiàng)技術(shù)。 在本文中,我們將探討Server-Sent Events 是什么,將它們的功能與 WebSocket 進(jìn)行比較,提供 Go 和 JavaScript 代碼示例,討論使用服務(wù)器發(fā)送事件的優(yōu)

    2024年02月11日
    瀏覽(24)
  • Server-Sent Events(以下簡(jiǎn)稱 SSE)及event-source-polyfill使用單向長(zhǎng)連接(后臺(tái)主動(dòng)向前端推送)

    Server-Sent Events(以下簡(jiǎn)稱 SSE)及event-source-polyfill使用單向長(zhǎng)連接(后臺(tái)主動(dòng)向前端推送)

    SSE 與 WebSocket 作用相似,都是建立瀏覽器與服務(wù)器之間的通信渠道,然后服務(wù)器向?yàn)g覽器推送信息SSE 是單向通道,只能服務(wù)器向?yàn)g覽器發(fā)送,因?yàn)榱餍畔⒈举|(zhì)上就是下載。如果瀏覽器向服務(wù)器發(fā)送信息,就變成了另一次 HTTP 請(qǐng)求 使用方法? Server-Sent Events 教程 - 阮一峰的網(wǎng)絡(luò)

    2024年02月12日
    瀏覽(30)
  • SSE[Server-Sent Events]實(shí)現(xiàn)頁面流式數(shù)據(jù)輸出(模擬ChatGPT流式輸出)

    SSE[Server-Sent Events]實(shí)現(xiàn)頁面流式數(shù)據(jù)輸出(模擬ChatGPT流式輸出)

    ????????服務(wù)端向客戶端推送消息,除了用WebSocket可實(shí)現(xiàn),還有一種服務(wù)器發(fā)送事件(Server-Sent Events)簡(jiǎn)稱 SSE,這是一種服務(wù)器端到客戶端(瀏覽器)的單向消息推送。ChatGPT 就是采用的 SSE。對(duì)于需要長(zhǎng)時(shí)間等待響應(yīng)的對(duì)話場(chǎng)景,ChatGPT 采用了一種巧妙的策略:它會(huì)將已經(jīng)計(jì)算

    2024年01月22日
    瀏覽(29)
  • html5學(xué)習(xí)筆記19-SSE服務(wù)器發(fā)送事件(Server-Sent Events)

    https://www.runoob.com/html/html5-serversentevents.html 允許網(wǎng)頁獲得來自服務(wù)器的更新。類似設(shè)置回調(diào)函數(shù)。 demo_sse.php demo_sse.aspx

    2024年02月09日
    瀏覽(59)
  • SSE(Server-Sent Events,服務(wù)器推送事件)和sockets(套接字)通信區(qū)別

    SSE(Server-Sent Events,服務(wù)器推送事件)和sockets(套接字)都是用于實(shí)現(xiàn)實(shí)時(shí)通信的技術(shù),但它們具有不同的特點(diǎn)和應(yīng)用場(chǎng)景。 SSE 的優(yōu)點(diǎn): 簡(jiǎn)單易用:SSE 是基于HTTP協(xié)議的一種實(shí)時(shí)通信技術(shù),使用簡(jiǎn)單,只需要在客戶端通過EventSource對(duì)象監(jiān)聽服務(wù)器推送的事件即可。 可靠性:

    2024年02月15日
    瀏覽(24)
  • Java:SpringBoot整合SSE(Server-Sent Events)實(shí)現(xiàn)后端主動(dòng)向前端推送數(shù)據(jù)

    SpringBoot整合SSE(Server-Sent Events)可以實(shí)現(xiàn)后端主動(dòng)向前端推送數(shù)據(jù) 依賴 后端接收sse連接 前端瀏覽器代碼 項(xiàng)目目錄 完整依賴 pom.xml 前端代碼 index.html 定義一個(gè)返回?cái)?shù)據(jù) Message.java 定義sse接口 SseService.java 實(shí)現(xiàn)sse接口 SseServiceImpl.java 定時(shí)任務(wù) SendMessageTask.java 前端路由 IndexCont

    2024年02月10日
    瀏覽(22)
  • 淺談PHP結(jié)合JavaScript SSE(Server Sent Events)實(shí)現(xiàn)服務(wù)器實(shí)時(shí)推送功能

    如配置后Nginx遇到502/504的,請(qǐng)參考這兩篇文章的解決方案 PHP-FPM與Nginx通信報(bào) 502 Bad Gateway或504 Gateway Timeout終極解決方案(適用于PHP執(zhí)行耗時(shí)任務(wù)情況下的報(bào)錯(cuò)) Linux系統(tǒng)下配置Nginx使部分URL使用多套自定義的PHP-FPM配置 SSE 的全稱是 Server Sent Events,即服務(wù)器推送事件。它是一種

    2024年02月08日
    瀏覽(27)
  • Git 使用小烏龜(TortoiseGit)拉取Github項(xiàng)目時(shí)報(bào)錯(cuò)【server sent :publickey】

    Git 使用小烏龜(TortoiseGit)拉取Github項(xiàng)目時(shí)報(bào)錯(cuò)【server sent :publickey】

    報(bào)錯(cuò):No supported authentication methods available (server sent: publickey) 原因:由于小烏龜沒有設(shè)置git 的路徑,導(dǎo)致使用小烏龜?shù)臅r(shí)候并沒有使用git,所以連接不上。 解決如下: 這里應(yīng)該設(shè)置的時(shí)GIt 的路徑而不是小烏龜?shù)穆窂?。如圖是正確的:

    2024年02月07日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包