您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么實現spring mvc SSE服務端發送事件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么實現spring mvc SSE服務端發送事件”吧!
需要新式瀏覽器支持
服務端:
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import static java.util.concurrent.TimeUnit.SECONDS; @RestController public class SSEController { /** * 每5秒向瀏覽器發送消息 * 媒體類型必須為:text/event-stream * 輸出的格式: * <pre> * :這是注釋 單獨一個冒號,代表服務器推送的一個注釋。(這個可解決http中的324,發送心跳包) * id:11 代表數據標識符,客戶端接收到消息后,會把這個 ID 作為內部屬性 Last-Event-ID,在斷開重連 成功后,會把 Last-Event-ID 發送給服務器。 * data:我是誰 這個數據就是客戶端所接受到的數據(可推送格式化過的json數據),客戶端會把這個字段解析為字符串,如果一條消息有多個 data 字段,客戶端會自動用換行符 連接成一個字符串。 * event:myEvent 客戶端收到消息時,會在當前的 EventSource 對象上觸發一個事件,這個事件的名稱就是這個字段的值,如果消息沒有這個字段,客戶端的 EventSource 對象就會觸發默認的 message 事件。 * retry:3000 客戶端在http超時斷開后多長時間重新連接 ,只接受整數,單位是毫秒。如果這個值不是整數則會被自動忽略。 * </pre> * * @author Canaan * @date 2019/8/28 23:15 */ @RequestMapping(value = "sse_push", produces = "text/event-stream") public String push() throws InterruptedException { SECONDS.sleep(5); String msg = "當前時間為-" + LocalDateTime.now().toString(); return String.format("data:%s\n\n", msg); } }
客戶端:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script type="text/javascript"> if (!!window.EventSource) { var source = new EventSource("/demo/sse_push"); source.addEventListener("message", function (e) { //data:服務器端傳回的數據 //origin: 服務器端URL的域名部分,即協議、域名和端口。 //lastEventId:數據的編號,由服務器端發送。如果沒有編號,這個屬性為空。 console.info(e.data); }); source.addEventListener("open", function (e) { // console.info("連接打開"); }, false); source.addEventListener("error", function (e) { if (e.readyState === EventSource.CLOSED) { console.info("連接關閉"); return; } console.info(e); }, false); } else { alert("你的瀏覽器不支持 SSE"); } </script> </html>
感謝各位的閱讀,以上就是“怎么實現spring mvc SSE服務端發送事件”的內容了,經過本文的學習后,相信大家對怎么實現spring mvc SSE服務端發送事件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。