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