Spring MVC4.1服務(wù)器端推送實現(xiàn)過程解析
更新時間:2019年11月29日 09:51:18 投稿:yaominghui
這篇文章主要介紹了Spring MVC4.1服務(wù)器端推送實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
這篇文章主要介紹了Spring MVC4.1服務(wù)器端推送實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
服務(wù)器端推送
- SSE(server send event)是一種服務(wù)器端向瀏覽器推送消息的技術(shù),而不是我們常規(guī)的瀏覽器像server請求然后響應(yīng);
- 當我們需要使用server向瀏覽器主動推送數(shù)據(jù)的時候,請考慮使用該項技術(shù),而不是考慮具有雙向通訊功能的websocket;
- 以前我們用ajax輪詢server也能實現(xiàn),服務(wù)器負擔大;
- sse原理是向server請求一次后,server會掛住請求不放(此時瀏覽器里請求狀態(tài)是pending),等有數(shù)據(jù)后才返回給瀏覽器,然后再發(fā)起下一次請求,以此類推;
- 所有主流瀏覽器均支持服務(wù)器發(fā)送事件,除了 Internet Explorer(6,7,8,9);
示例
服務(wù)器推送控制器
package com.wisely.web;
import java.util.Random;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SSEController {
//注意produces="text/event-stream"
@RequestMapping(value="/push",produces="text/event-stream")
public @ResponseBody String push(){
Random r = new Random();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "data:Testing 1,2,3" + r.nextInt() +"\n\n";
}
}
頁面代碼
<div id="msg_from_server"></div>
<script type="text/javascript" src="<c:url value="/js/jquery.js" />"></script>
<script type="text/javascript">
if (!!window.EventSource) {
var source = new EventSource('push'); //為http://localhost:8080/testSpringMVC/push
s='';
source.addEventListener('message', function(e) {
s+=e.data+"<br/>"
$("#msg_from_server").html(s);
});
source.addEventListener('open', function(e) {
console.log("連接打開.");
}, false);
source.addEventListener('error', function(e) {
if (e.readyState == EventSource.CLOSED) {
console.log("連接關(guān)閉");
} else {
console.log(e.readyState);
}
}, false);
} else {
console.log("沒有sse");
}
</script>
效果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java Scanner類用法及nextLine()產(chǎn)生的換行符問題實例分析
這篇文章主要介紹了Java Scanner類用法及nextLine()產(chǎn)生的換行符問題,結(jié)合實例形式分析了Scanner類功能、hasNextInt()和nextInt()方法使用及nextLine()產(chǎn)生的換行符問題解決方法,需要的朋友可以參考下2019-03-03
深入理解Spring注解@Async解決異步調(diào)用問題
這篇文章主要介紹了深入理解Spring注解@Async解決異步調(diào)用問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Spring Boot 3.x 集成 Eureka Server/Cl
隨著SpringBoot 3.x版本的開發(fā)嘗試,本文記錄了在集成Eureka Server/Client時所遇到的問題和解決方案,文中詳細介紹了搭建服務(wù)、配置文件和測試步驟,感興趣的朋友跟隨小編一起看看吧2024-09-09
詳解SpringBoot項目整合Vue做一個完整的用戶注冊功能
本文主要介紹了SpringBoot項目整合Vue做一個完整的用戶注冊功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

