功能舉例: 通過特定操作實時推送到頁面反饋進行彈窗和播放音樂。
先貼源代碼地址: 點我GO
1. 引入pom
創建一個基礎的Spring Boot工程(沒有特定版本),並在pom.xml
中引入需要的依賴內容:
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 </dependency> 5 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-freemarker</artifactId> 9 </dependency> 10 11 <dependency> 12 <groupId>org.springframework.boot</groupId> 13 <artifactId>spring-boot-starter-websocket</artifactId> 14 </dependency> 15 <dependency> 16 <groupId>org.springframework.boot</groupId> 17 <artifactId>spring-boot-starter-test</artifactId> 18 <scope>test</scope> 19 </dependency>
2. 配置配置文件(看需要配置) :
spring.freemarker.template-loader-path=classpath:/templates
spring.mvc.static-path-pattern=/static/**
3. 在需要接收消息的頁面進行配置 :
<script> var websocket =null; if('WebSocket' in window){
//這里的地址根據第五步配置的注解地址填寫 websocket = new WebSocket('ws://127.0.0.1:8080/webSocket'); }else { alert('您的瀏覽器不支持websocket。'); } websocket.onopen = function (event) { console.log('建立連接'); } websocket.onclose = function (event) { console.log('連接關閉'); } websocket.onmessage = function (event) { console.log('收到消息:'+event.data) } websocket.onerror = function () { alert('websocket通信發生錯誤'); } websocket.onbeforeunload = function(){ websocket.close(); } </script>
4. 配置WebSocket Bean :
@Component public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointConfigurator(){ return new ServerEndpointExporter(); } }
5.實現webSocket
@Component @ServerEndpoint("/webSocket") public class WebSocket { private Session session; private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>(); @OnOpen public void onOpen(Session session){ this.session = session; webSocketSet.add(this); System.out.println("新的連接 總數:"+webSocketSet.size()); } @OnClose public void onColse(){ webSocketSet.remove(this); System.out.println("斷開連接 總數:"+webSocketSet.size()); } @OnMessage public void onMessage(String message){ System.out.println("收到客戶端發來的消息:"+message); } public void sendMessage(String message){ for (WebSocket webSocket : webSocketSet){ System.out.println("廣播消息:"+message); try { webSocket.session.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } } }
6.配置觸發控制器
@RequestMapping("/shop") public class ListController { @Autowired private WebSocket webSocket; /** * 接收推送來的消息的頁面 * @return */ @RequestMapping(value ="/list") public String list(){ return "list"; } /** * 觸發推送 * 舉例:list方法可以是訂單列表,這個方法可以是下單的接口,下單后,list的訂單列表提示收到新訂單。 * @return */ @RequestMapping(value = "/test") @ResponseBody public String test(){ webSocket.sendMessage("hello,來了新數據呢~"); return "send over,Please return to the list request page。"; } }
6.配置websocket響應提示:
<audio id="notice" loop="loop"> <source src="http://fs.w.kugou.com/201905211603/af65d55785b7e97732644d0900fdf8b9/G146/M04/17/18/MocBAFx43JWAdxDBAC92YHGZWaY748.mp3" type="audio/mpeg"> </audio>
websocket.onmessage = function (event) { console.log('收到消息:'+event.data) alert(event.data); var myAuto = document.getElementById('notice'); console.log('開始播放音樂!15秒后停止...'); myAuto.play(); setTimeout(function () { myAuto.pause(); console.log('音樂停止...') },15000) }
7.測試展示:
請求list地址 http://localhost:8080/shop/list
后台輸出:
觸發請求條件: http://localhost:8080/shop/test
list頁面接收到消息:
查看:
如有不當之處,請予指正! 如果你有什么疑問也歡迎隨時聯系我共同探討。
Email:wdnnccey#gmail.com