作者:互联网 时间: 2026-09-01 20:58:57
本文讲解如何SpringBoot如何使用WebSocket进行一对一发送消息,如果想学习SpringBoot结合Websocket群发消息,可以前往查看我的上一篇文章:SpringBoot使用WebSocket(一)
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency>/** * @author Gjing **/@Configurationpublic class WebsocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}/** * @author Gjing **/@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class Message {private String userId;private String message;}/** * @author Gjing **/@ServerEndpoint("/test-one")@Component@Slf4jpublic class MyOneToOneServer {/** * 用于存放所有在线客户端 */private static Map<String, Session> clients = new ConcurrentHashMap<>();private Gson gson = new Gson();@OnOpenpublic void onOpen(Session session) {log.info("有新的客户端上线: {}", session.getId());clients.put(session.getId(), session);}@OnClosepublic void onClose(Session session) {String sessionId = session.getId();log.info("有客户端离线: {}", sessionId);clients.remove(sessionId);}@OnErrorpublic void onError(Session session, Throwable throwable) {throwable.printStackTrace();if (clients.get(session.getId()) != null) {clients.remove(session.getId());}}@OnMessagepublic void onMessage(String message) {log.info("收到客户端发来的消息: {}", message);this.sendTo(gson.fromJson(message, Message.class));}/** * 发送消息 * * @param message 消息对象 */private void sendTo(Message message) {Session s = clients.get(message.getUserId());if (s != null) {try {s.getBasicRemote().sendText(message.getMessage());} catch (IOException e) {e.printStackTrace();}}}}


本文中只介绍了最简单的业务处理方式,更深层次的处理各位请自行学习,demo源代码地址为:springboot-websocket