這篇文章主要介紹了 Spring Boot整合WebSocket的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、西豐網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
添加依賴到pom.xml
org.springframework.boot spring-boot-starter-websocket
添加配置文件
@Configuration public class WebSocketConfig { @Bean ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
添加WebSocket的服務(wù)端
@Component @ServerEndpoint("/ws/{username}") public class WebSocketEchoServer { @OnOpen public void onOpen(Session session, @PathParam("username") String username) { System.out.println("username = " + username + " is online."); } @OnClose public void onClose(Session session, @PathParam("username") String username, CloseReason closeReason) { System.out.println("username = " + username + " is offline."); System.out.println("Closing a WebSocket due to " + closeReason.getReasonPhrase()); } // @OnMessage // public String onMessage(String message, Session session) throws IOException { // System.out.println("received message=" + message); // return "echo " + message; // } @OnMessage public void onMessage(String message, Session session) throws IOException { System.out.println("received message=" + message); session.getBasicRemote().sendText("echo " + message); } @OnError public void onError (Session session, Throwable throwable) { System.out.println("發(fā)生錯誤"); throwable.printStackTrace(); } public void boardCast(Message message) { // todo: 遍歷所有的session,給所有session發(fā)送消息 } }
測試頁面(WebSocket Client)
測試頁面
這里使用一個非常簡單的測試頁面,只包含一個輸入框和一個發(fā)送按鈕。
當(dāng)我們點(diǎn)擊按鈕的時候,就把輸入框中的內(nèi)容,發(fā)送到服務(wù)端。
測試頁面使用的服服務(wù)端的URI是"ws://localhost:8080/ws/tom",其中“tom”對應(yīng)的參數(shù)username。
常用注解說明
@ServerEndpoint:告訴容器將給定類視為WebSocket Server Endpoint。注解有一個必填參數(shù)value,用于指定路徑。
@ServerEndpoint("/hello") public class MyEndpoint { }
上訴代碼將發(fā)布一個相對路徑是hello的Endpoint。路徑可以包含在后續(xù)方法調(diào)用中使用的路徑參數(shù);例如,例如,/hello/{userid}
是有效路徑,{userid}
的值可以在方法調(diào)用中使用@PathParam
注釋獲得。
默認(rèn)端口8080,WebSocket 可以使用如下地址訪問:ws://localhost:8080/mycontextroot/hello
。
聲明當(dāng)前類是WebSocket server,注解后面的字符串("/ws/{username}")指定監(jiān)聽的uri地址。這里“/ws/{username}”對應(yīng)的完整的地址“ws://localhost:8080/ws/XXX”, XXX代表是參數(shù)username的值。
@ClientEndpoint: 聲明當(dāng)前類是WebSocket Client。
@OnOpen: 在連接建立后調(diào)用,方法可以包含如下參數(shù)
javax.websocket.Session參數(shù)
EndpointConfig參數(shù),包含endpoint的配置信息
0個或多個用 @PathParam
注解的參數(shù)。
@OnOpen public void myOnOpen (Session session) { System.out.println ("WebSocket opened: "+session.getId()); }
@OnMessage: 接收到消息時調(diào)用,方法包含如下參數(shù):
javax.websocket.Session參數(shù)
0個或多個用 @PathParam
注解的參數(shù)
接收到的消息,默認(rèn)是String類型。如果使用了編解碼函數(shù),也可以是Java Object類型。
@OnMessage public void myOnMessage (String txt) { System.out.println ("WebSocket received message: "+txt); }
上訴代碼的返回值是void,還有一種返回值不是void的寫法,這種實(shí)現(xiàn)會直接把返回值發(fā)送給客戶端。
@OnMessage public String myOnMessage (String txt) { return txt.toUpperCase(); }
還有一個發(fā)送消息的方法:
RemoteEndpoint.Basic other = session.getBasicRemote(); other.sendText ("Hello, world");
@OnClose: 連接關(guān)閉時調(diào)用,方法可以包含如下參數(shù):
@OnClose public void myOnClose (CloseReason reason) { System.out.prinlnt ("Closing a WebSocket due to "+reason.getReasonPhrase()); }
javax.websocket.Session參數(shù)
javax.websocket.CloseReason參數(shù)
@OnError: 通訊過程中出現(xiàn)錯誤時調(diào)用
@OnError public void onError(Session session, Throwable throwable) { // Do error handling here }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ Spring Boot整合WebSocket的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!