當前位置:編程學習大全網 - 源碼下載 - SSE(Server-Send Events)實踐

SSE(Server-Send Events)實踐

HTTP 是客戶端-服務器計算模型中的請求-響應協議。要開始交換,客戶端向服務器提交請求。為了完成交換,服務器向客戶端返回響應。服務器只能向壹個客戶端發送響應 (發出請求的那個) 。在 HTTP 協議中,客戶端是消息交換的發起者。

服務器發送事件 (SSE) 是壹種簡單的技術,用於為特定的 Web 應用程序實現服務器到客戶端的異步通信。

有多種技術允許客戶端從服務器接收有關異步更新的消息。它們可以分為兩類: 客戶端拉取 服務器推送

在客戶端拉取技術中,客戶端會定期向服務器請求更新。服務器可以使用更新或尚未更新的特殊響應進行響應。有兩種類型的客戶端拉取:短輪詢和長輪詢。

客戶端定期向服務器發送請求。如果服務器有更新,它會向客戶端發送響應並關閉連接。如果服務器沒有更新,它也會向客戶端發送壹個響應並關閉連接。

客戶端向服務器發送請求。如果服務器有更新,它會向客戶端發送響應並關閉連接。如果服務器沒有更新,它會保持連接直到更新可用。當更新可用時,服務器向客戶端發送響應並關閉連接。如果更新在某個超時時間內不可用,服務器會向客戶端發送響應並關閉連接。

在服務器推送技術中,服務器在消息可用後立即主動向客戶端發送消息。其中,有兩種類型的服務器推送:SSE和 WebSocket。

SSE 是壹種在基於瀏覽器的 Web 應用程序中僅從服務器向客戶端發送文本消息的技術。SSE基於 HTTP 協議中的持久連接, 具有由 W3C 標準化的網絡協議和 EventSource 客戶端接口,作為 HTML5 標準套件的壹部分。

WebSocket 是壹種在 Web 應用程序中實現同時、雙向、實時通信的技術。WebSocket 基於 HTTP 以外的協議(TCP),因此可能需要額外設置網絡基礎設施(代理服務器、NAT、防火墻等)。

客戶端通過Http協議請求,在握手階段升級為WebSocket協議。

在數據字段中,服務器可以發送事件數據

服務器可以發送唯壹的事件標識符(id字段)。如果連接中斷,客戶端會 自動重新連接 並發送最後接收到的帶有header的 Last-Event-ID 的事件 ID。

在重試字段中,服務器可以發送超時(以毫秒為單位),之後客戶端應在連接中斷時自動重新連接。如果未指定此字段,則標準應為 3000 毫秒。

如果壹行以冒號字符 : 開頭,客戶端應該忽略它。這可用於從服務器發送評論或防止某些代理服務器因超時關閉連接。

要打開連接,應創建壹個 EventSource 對象。

盡管 SSE 旨在將事件從服務器發送到客戶端,但可以使用 GET 查詢參數將數據從客戶端傳遞到服務器。

要關閉連接,應調用方法 close()。

有表示連接狀態的 readyState 屬性:

客戶端接收消息並處理他們,可以使用onmessage方法

SSE可被大多數瀏覽器支持:

Spring Web MVC 框架 5.2.0 是基於 Servlet 3.1 API 且用線程池實現異步應用程序. 所以應用能夠被使用在 Servlet 3.1+ 的容器,比如:Tomcat 8.5 和 Jetty 9.3.

使用Spring MVC來發送事件:

示例:

在這個例子中,服務器每秒發送壹個持續時間短的周期性事件流 - 壹個有限的詞流,直到詞完成。

示例:

運行效果:

客戶端示例(words.html):

運行效果:

在此示例中,服務器發送持久的周期性事件流 - 每秒可能無限的服務器性能信息流:

效果預覽(每秒輸出壹次):

非周期性是指沒有固定的時間周期,可能由其他因素在任意時刻都可能觸發,下面示例通過spring event來模擬觸發因子。

效果:

模擬觸發動作:調用 http://localhost:8080/sse/mvc/trigger?eventType=customer

客戶端收到數據:

Spring Web Flux 框架 5.2.0 是基於 Reactive Streams API 且使用 event-loop 計算模型來實現異步java應用程序。 此類應用程序可以在非阻塞 Web 服務器(例如 Netty 4.1 和 Undertow 1.4)和 Servlet 3.1+ 容器(例如 Tomcat 8.5 和 Jetty 9.3)上運行。

使用 Spring Web Flux 框架實現發送事件:

簡單示例:

和上面spring mvc的示例壹樣,也是每秒輸出數據,實現如下:

效果:

對比spring mvc的實現,我們改為flux實現,如下:

效果和上面是壹樣的,可以看出,reactive api是非常的簡潔。

  • 上一篇:找書,超級NB,無敵,的異世修真小說.
  • 下一篇:協議源代碼交換小組
  • copyright 2024編程學習大全網