今天就跟大家聊聊有關(guān)websocket如何在springboot中應(yīng)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司是專業(yè)的鄂州網(wǎng)站建設(shè)公司,鄂州接單;提供網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鄂州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
1.首先搭建一個簡單的springboot環(huán)境
org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE org.springframework.boot spring-boot-starter-web
2.引入springboot整合websocket依賴
org.springframework.boot spring-boot-starter-websocket 2.0.4.RELEASE
3.創(chuàng)建啟動springboot的核心類
package com; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class GlobalConfig { public static void main(String[] args) { SpringApplication.run(GlobalConfig.class, args); } }
4.創(chuàng)建websocket服務(wù)器
正如springboot 官網(wǎng)推薦的websocket案例,需要實現(xiàn)WebSocketHandler或者繼承TextWebSocketHandler/BinaryWebSocketHandler當(dāng)中的任意一個.
package com.xiaoer.handler; import com.alibaba.fastjson.JSONObject; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; import java.util.HashMap; import java.util.Map; /** * 相當(dāng)于controller的處理器 */ public class MyHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); Mapmap = JSONObject.parseObject(payload, HashMap.class); System.out.println("=====接受到的數(shù)據(jù)"+map); session.sendMessage(new TextMessage("服務(wù)器返回收到的信息," + payload)); } }
5.注冊處理器
package com.xiaoer.config; import com.xiaoer.handler.MyHandler; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "myHandler/{ID}"); } public WebSocketHandler myHandler() { return new MyHandler(); } }
6.運行訪問
出現(xiàn)如上圖是因為不能直接通過http協(xié)議訪問,需要通過html5的ws://協(xié)議進(jìn)行訪問.
7.創(chuàng)建Html5 客戶端
8.運行
利用客戶端運行之后仍然會出現(xiàn)上圖中的一連接就中斷了websocket連接.
這是因為spring默認(rèn)不接受跨域訪問:
As of Spring Framework 4.1.5, the default behavior for WebSocket and SockJS is to accept only same origin requests.
需要在WebSocketConfig中設(shè)置setAllowedOrigins.
package com.xiaoer.config; import com.xiaoer.handler.MyHandler; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "myHandler/{ID}") .setAllowedOrigins("*"); } public WebSocketHandler myHandler() { return new MyHandler(); } }
如下圖,并未輸出中斷,說明連接成功.
9.服務(wù)器和客戶端的相互通信
服務(wù)器端收到消息
客戶端收到服務(wù)器主動推送消息
看完上述內(nèi)容,你們對websocket如何在springboot中應(yīng)用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。