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

實時通信的服務(wù)器推送機制 EventSource(SSE) 簡介,附 go 實現(xiàn)示例

這篇具有很好參考價值的文章主要介紹了實時通信的服務(wù)器推送機制 EventSource(SSE) 簡介,附 go 實現(xiàn)示例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

不知道大家有沒有見過 Content-Type:text/event-stream 的請求頭,這是 HTML5 中的 EventSource 是一項強大的 API,通過服務(wù)器推送實現(xiàn)實時通信。

WebSocket 相比,EventSource 提供了一種簡單而可靠的單向通信機制(服務(wù)器->客戶端),實現(xiàn)簡單,適用于許多實時應(yīng)用場景。

本文將介紹 EventSource 的簡單使用、與 WebSocket 的對比以及其優(yōu)缺點,最后對其進行總結(jié)。

EventSource

客戶端從服務(wù)端訂閱一條“流”,之后服務(wù)端可以發(fā)送消息給客戶端直到服務(wù)端或者客戶端關(guān)閉該“流”,所以 EventSource 也叫作 SSE(server-sent-event)

  • EventSourceHTML5 中的一項 API,用于在客戶端和服務(wù)器之間建立持久的、單向的通信連接。
  • 它基于 HTTP 協(xié)議,通過服務(wù)器推送的方式向客戶端發(fā)送實時事件通知。
  • 客戶端通過添加事件偵聽器來捕獲事件并執(zhí)行相應(yīng)的操作。

簡單使用

示例:
服務(wù)器端使用 Go 創(chuàng)建了一個路由 /events,當(dāng)客戶端通過 EventSource 對象連接到該路由時,服務(wù)器會不斷地發(fā)送事件流(每隔2秒發(fā)送一個事件)。客戶端的 HTML 頁面中使用 JavaScript 創(chuàng)建了一個 EventSource 對象,通過 onmessage 事件,將接收到的事件數(shù)據(jù)添加到頁面中。如果發(fā)生錯誤,客戶端會關(guān)閉 EventSource 連接。

文件結(jié)構(gòu)如下

程序目錄
	- main.go
	- c1.html

go 服務(wù)

package main

import (
	"fmt"
	"gopkg.in/antage/eventsource.v1"
	"log"
	"net/http"
	"time"
)

func main() {
	es := eventsource.New(nil, nil)
	defer es.Close()

	http.Handle("/", http.FileServer(http.Dir("./")))
	http.Handle("/events", es)
	go func() {
		for {
			// 每2秒發(fā)送一條當(dāng)前時間消息,并打印對應(yīng)客戶端數(shù)量
			es.SendEventMessage(fmt.Sprintf("hello, now is: %s", time.Now()), "", "")
			log.Printf("Hello has been sent (consumers: %d)", es.ConsumersCount())
			time.Sleep(2 * time.Second)
		}
	}()

	log.Println("Open URL http://localhost:8080/ in your browser.")
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		log.Fatal(err)
	}
}

前端 HTML

<!DOCTYPE html>
<html>
<head>
    <title>SSE test</title>
    <script type="text/javascript">
        window.addEventListener("DOMContentLoaded", function () {
            var evsrc = new EventSource("http://localhost:8080/events");
            var msgEvent = function (ev) {
                document.getElementById("log")
                    .insertAdjacentHTML("beforeend", "<li>" + ev.data + "</li>");
            }
			evsrc.onmessage = msgEvent;
			//evsrc.addEventListener("message", msgEvent)
            evsrc.onerror = function (ev) {
                console.log("readyState = " + ev.currentTarget.readyState);
            }
        })
    </script>
</head>
<body>
<h1>SSE test</h1>
<div>
    <ul id="log">
    </ul>
</div>
</body>
</html>

服務(wù)啟動后訪問 http://localhost:8080/c1.html 可見如下頁面
實時通信的服務(wù)器推送機制 EventSource(SSE) 簡介,附 go 實現(xiàn)示例

和 websocket 的對比

EventSource 的優(yōu)點

  • 簡單易用:EventSource 使用簡單,基于標(biāo)準(zhǔn)的 HTTP 協(xié)議,無需復(fù)雜的握手過程。
  • 自動重連:EventSource 具有內(nèi)置的重連機制,確保連接中斷后自動重新連接。
  • 輕量級:EventSource 使用長輪詢機制,消耗的資源相對較少,適合低帶寬環(huán)境。
  • 跨域支持:EventSource 允許在跨域環(huán)境下進行通信,通過適當(dāng)?shù)捻憫?yīng)頭授權(quán)來自不同域的客戶端連接。

EventSource 的缺點

  • 單向通信:EventSource 只支持服務(wù)器向客戶端的單向通信,無法實現(xiàn)客戶端向服務(wù)器的實時交互。
  • 較低的瀏覽器支持:盡管現(xiàn)代瀏覽器廣泛支持 EventSource,但在一些較舊的瀏覽器中可能不完全支持。

WebSocket 的優(yōu)點

  • 雙向通信:WebSocket 支持全雙工通信,客戶端和服務(wù)器可以在同一連接上進行雙向數(shù)據(jù)交換。
  • 實時性和效率:WebSocket 具有低延遲和高效性能,適用于需要快速、實時響應(yīng)的應(yīng)用。
  • 大規(guī)模應(yīng)用:WebSocket適用于復(fù)雜的、大規(guī)模的實時應(yīng)用,如在線游戲、協(xié)同編輯等。

WebSocket 的缺點

  • 復(fù)雜性:WebSocket協(xié)議的握手過程相對復(fù)雜,需要服務(wù)器和客戶端實現(xiàn)特定的協(xié)議邏輯。
  • 難以穿越防火墻和代理服務(wù)器:WebSocket的特殊協(xié)議可能會受到防火墻和代理服務(wù)器的限制。

總結(jié)

EventSourceHTML5 中一個強大的 API,提供了簡單可靠的服務(wù)器推送機制,用于實現(xiàn)實時通信。

WebSocket 相比,EventSource 的優(yōu)勢在于其簡單易用、自動重連、輕量級和跨域支持。然而,它也有一些限制,如單向通信和較低的瀏覽器支持。相比之下,WebSocket 適用于雙向通信、大規(guī)模應(yīng)用和實時性要求較高的場景,但其復(fù)雜性和穿越防火墻的挑戰(zhàn)也需要考慮。

總的來說,EventSource 是一種非常有用的 API,適用于許多實時應(yīng)用場景,如實時股票報價、即時聊天、實時通知等。它提供了一種簡單而可靠的方式來建立服務(wù)器推送連接,并實現(xiàn)實時更新和通知。如果應(yīng)用程序只需要服務(wù)器向客戶端單向推送數(shù)據(jù),EventSource 是一個不錯的選擇。然而,如果需要雙向通信或更高級的實時功能,WebSocket 可能更適合。文章來源地址http://www.zghlxwxcb.cn/news/detail-499616.html

參考

  • Mozilla Developer Network (MDN) - EventSource
  • Stream Updates with Server-Sent Events

到了這里,關(guān)于實時通信的服務(wù)器推送機制 EventSource(SSE) 簡介,附 go 實現(xiàn)示例的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 【SpringBoot+SseEmitter】 和【Vue3+EventSource】 實時數(shù)據(jù)推送

    【SpringBoot+SseEmitter】 和【Vue3+EventSource】 實時數(shù)據(jù)推送

    EventSource 的優(yōu)點 簡單易用:EventSource 使用簡單,基于標(biāo)準(zhǔn)的 HTTP 協(xié)議,無需復(fù)雜的握手過程。 自動重連:EventSource 具有內(nèi)置的重連機制,確保連接中斷后自動重新連接。 輕量級:EventSource 使用長輪詢機制,消耗的資源相對較少,適合低帶寬環(huán)境。 跨域支持:EventSource 允許在

    2024年02月03日
    瀏覽(37)
  • 【Qt】使用Qt實現(xiàn)Web服務(wù)器(九):EventSource+JSON實現(xiàn)工業(yè)界面數(shù)據(jù)刷新
  • 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)
  • 了解JS三種實時通信方式——Eventsource、websocket與socket.io之間的差異和優(yōu)缺點

    EventSource EventSource 是一種輕量級的 API,用于獲取來自服務(wù)器的實時事件。它是 WebSockets 的替代方案,因為它比 WebSockets 更簡單,更適合處理服務(wù)器向客戶端發(fā)送數(shù)據(jù)的情況。使用 EventSource ,只有服務(wù)器能夠發(fā)送消息,所以它更安全。但是,它不支持雙向通信或客戶端發(fā)送消

    2024年02月08日
    瀏覽(23)
  • git 新建 branch 推送 到服務(wù)器

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

    2024年02月07日
    瀏覽(19)
  • 服務(wù)器推送數(shù)據(jù)你還在用 WebSocket么?

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

    當(dāng)涉及到推送數(shù)據(jù)時,人們首先會想到 WebSocket。 的確,WebSocket 允許雙向通信,可以自然地用于服務(wù)器到瀏覽器的消息推送。 然而,如果只需要單向的消息推送,HTTP 通過服務(wù)器發(fā)送的事件也有這種功能。 WebSocket 的通信過程如下: 首先,通過 HTTP 切換協(xié)議。服務(wù)器返回 101 狀態(tài)碼后

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

    author: jwensh date: 20231122 沒有使用域名的 gitlb 服務(wù)器搬移(IP地址變了), 以至于 gitlab 管理的項目無法進行連接及推送。因為涉及到多個項目工程,所以可以用本地配置修改的方式來進行重新關(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)
  • 企業(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日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包