pom.xml

org.springframework.boot

spring-boot-starter-websocket

WebSocketConfiguration.java

@Configuration

public class WebSocketConfiguration {

@Bean

public ServerEndpointExporter serverEndpointExporter() {

return new ServerEndpointExporter();

}

}

ChatMessage.java

@Data

@Builder

@AllArgsConstructor

@NoArgsConstructor

public class ChatMessage {

private Long senderId;

private Long receiverId;

private String content;

}

WebSocketServer.java

@Slf4j

@Component

@ServerEndpoint("/ws/{userId}")

public class WebSocketServer {

@Autowired

private IChatService chatService;

public static Map sessionMap = new ConcurrentHashMap<>();

@OnOpen

public void onOpen(Session session, @PathParam("userId") Long userId) {

log.info("用户: {} 与服务器建立连接", userId);

sessionMap.put(userId, session);

}

@OnMessage

public void onMessage(String message, Session senderSession, @PathParam("userId") Long senderUserId) {

ChatMessage receivedMessage = JSON.parseObject(message, ChatMessage.class);

chatService.persistChatMessage(receivedMessage);

sendPrivateMessage(receivedMessage);

}

@OnClose

public void onClose(Session session, @PathParam("userId") Long userId) {

log.info("用户: {} 与服务器断开连接", userId);

sessionMap.remove(userId);

}

private void sendPrivateMessage(ChatMessage message) {

String jsonMessage = JSON.toJSONString(message);

Session receiverSession = sessionMap.get(message.getReceiverId());

if (receiverSession != null) {

try {

receiverSession.getBasicRemote().sendText(jsonMessage);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

chat.html

User

User

Received Messages:

    Send a Message:


    相关链接

    评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。