spring boot 集成 websocket

最近正好項(xiàng)目升級(jí),用到websocket,改寫原來那些繁瑣代碼!!

1. 原生注解

pom.xml

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-websocket</artifactId>

</dependency>

WebSocketConfig


*/packagecn.coder4j.study.example.websocket.config;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.Configuration;

importorg.springframework.web.socket.config.annotation.EnableWebSocket;

importorg.springframework.web.socket.server.standard.ServerEndpointExporter;


@Configuration

@EnableWebSocket

public? class? WebSocketConfig{

@Bean

public ServerEndpointExporter serverEndpoint(){

returnnewServerEndpointExporter();

}

}

說明:

這個(gè)配置類很簡單,通過這個(gè)配置 spring boot 才能去掃描后面的關(guān)于 websocket 的注解

WsServerEndpoint

packagecn.coder4j.study.example.websocket.ws;

importorg.springframework.stereotype.Component;

importjavax.websocket.OnClose;

importjavax.websocket.OnMessage;

importjavax.websocket.OnOpen;

importjavax.websocket.Session;

importjavax.websocket.server.ServerEndpoint;

importjava.io.IOException;

importjava.util.HashMap;importjava.util.Map;

@ServerEndpoint("/myWs")

@Component

public class WsServerEndpoint{

/**

? ? * 連接成功

? ? *

? ? * @param session

? ? */@OnOpenpublicvoidonOpen(Session session){System.out.println("連接成功");}/**

? ? * 連接關(guān)閉

? ? *

? ? * @param session

? ? */@OnClosepublicvoidonClose(Session session){System.out.println("連接關(guān)閉");}/**

? ? * 接收到消息

? ? *

? ? * @param text

? ? */

@OnMessage

public String onMsg(String text)throws IOException{

return"servet 發(fā)送:"+text;

}

}

說明

這里有幾個(gè)注解需要注意一下,首先是他們的包都在 **javax.websocket **下。并不是 spring 提供的,而 jdk 自帶的,下面是他們的具體作用。

@ServerEndpoint

通過這個(gè) spring boot 就可以知道你暴露出去的 ws 應(yīng)用的路徑,有點(diǎn)類似我們經(jīng)常用的@RequestMapping。比如你的啟動(dòng)端口是 8080,而這個(gè)注解的值是 ws,那我們就可以通過 ws://127.0.0.1:8080/ws 來連接你的應(yīng)用

@OnOpen

當(dāng) websocket 建立連接成功后會(huì)觸發(fā)這個(gè)注解修飾的方法,注意它有一個(gè)? Session 參數(shù)

@OnClose

當(dāng) websocket 建立的連接斷開后會(huì)觸發(fā)這個(gè)注解修飾的方法,注意它有一個(gè)? Session 參數(shù)

@OnMessage

當(dāng)客戶端發(fā)送消息到服務(wù)端時(shí),會(huì)觸發(fā)這個(gè)注解修改的方法,它有一個(gè) String 入?yún)⒈砻骺蛻舳藗魅氲闹?/p>

@OnError

當(dāng) websocket 建立連接時(shí)出現(xiàn)異常會(huì)觸發(fā)這個(gè)注解修飾的方法,注意它有一個(gè)? Session 參數(shù)

另外一點(diǎn)就是服務(wù)端如何發(fā)送消息給客戶端,服務(wù)端發(fā)送消息必須通過上面說的 Session 類,通常是在@OnOpen 方法中,當(dāng)連接成功后把 session 存入 Map 的 value,key 是與 session 對(duì)應(yīng)的用戶標(biāo)識(shí),當(dāng)要發(fā)送的時(shí)候通過 key 獲得 session 再發(fā)送,這里可以通過session.getBasicRemote().sendText(*)* 來對(duì)客戶端發(fā)送消息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容