websocket技術在服務端實時消息的推送和im聊天系統中得到了廣泛應用。作為一名后端研發人員,這其中又有哪些需要了解和注意的問題點呢?接下來,我一一進行闡明。
SpringBoot項目中引入依賴
引入依賴
<!--websocket支持包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>your spring-boot version</version> </dependency>
創建websocket服務端
項目中引入websocket依賴后,接下來我們創建websocket服務端。
1.基礎版WebSocketServer
@Component @ServerEndpoint("/xxx") @Slf4j public class WebSocketServer { ? /** * 連接建立成功調用的方法 * * @param session 可選的參數。session為與某個客戶端的連接會話,需要通過它來給客戶端發送數據 */ @OnOpen public void onOpen(Session session, @PathParam("chatId") String chatId, @PathParam("userId") String userId) { ? ? } ? ? /** * 連接關閉調用的方法 */ @OnClose public void onClose(Session session) { ? } ? ? ? /** * 收到客戶端消息后調用的方法 * * @param message 客戶端發送過來的消息 * @param session 可選的參數 */ @OnMessage public void onMessage(String message, Session session) { } ? ? /** * 發生錯誤時調用 * * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { } ? }
-
@ServerEndpoint("/xxx") 中的路徑為websocket的連接地址,類似于我們項目中定義的controller接口地址。
它用于定義一個WebSocket端點:標記一個Java類作為一個WebSocket的服務器端點,使其能夠處理來自客戶端的WebSocket連接請求。使用@ServerEndpoint
注解時,你可以指定一個路徑,通過這個路徑客戶端可以與服務器建立WebSocket通信。
-
無論是websocket客戶端還是服務端,創建websocket對象時,都默認提供四個連接管理的基礎方法分別是:
-
-
onOpen() 打開/創建連接
-
onMessage() 接收消息
-
onClose() 連接關閉
-
onError() 出現錯誤:如消息處理異常
-
2.完整版webSocketServer
package com.rs.websocket.config; ? import com.alibaba.fastjson.JSON; import com.rs.patient.dao.model.PatientChatMessage; import com.rs.patient.rpc.api.PatientChatMessageService; import com.rs.patient.rpc.dto.PatientChatMessageDto; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websoc