4.10
一、后端 WebSocket 服务设计
在 Spring Boot 中实现基于 STOMP 协议的 WebSocket 服务:
java
// WebSocket配置
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic", "/queue"); // 客户端订阅路径前缀
config.setApplicationDestinationPrefixes("/app"); // 客户端发送消息路径前缀
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); // 支持SockJS降级
}
}
// 消息处理器
@Controller
public class MessageController {
@Autowired
private SimpMessageSendingOperations messagingTemplate;
// 处理客户端发送的消息
@MessageMapping("/chat")
public void handleChatMessage(@Payload ChatMessage message) {
messagingTemplate.convertAndSend("/topic/messages", message);
}
// 主动推送消息
public void pushSystemMessage(String content) {
messagingTemplate.convertAndSend("/topic/system", new SystemMessage(content));
}
}
二、Android 端 WebSocket 客户端实现
使用SocketRocket库连接后端 WebSocket 服务:
java
public class WebSocketClient {
private SRWebSocket webSocket;
private static WebSocketClient instance;
private WebSocketClient() {
URI uri = URI.create("ws://your-server:8080/ws/websocket");
webSocket = new SRWebSocket(uri);
webSocket.setDelegate(this);
webSocket.connect();
}
public static WebSocketClient getInstance() {
if (instance == null) {
instance = new WebSocketClient();
}
return instance;
}
// 连接成功回调
public void webSocketDidOpen(SRWebSocket webSocket) {
Log.d("WebSocket", "连接成功");
subscribeTopic("/topic/messages");
}
// 接收消息回调
public void webSocket(SRWebSocket webSocket, NSData data) {
String message = new String(data.toByteArray());
Log.d("WebSocket", "收到消息: " + message);
// 处理消息...
}
// 订阅主题
public void subscribeTopic(String topic) {
String subscribeFrame = "SUBSCRIBE\nid:sub-0\ndestination:" + topic + "\n\n\x00";
webSocket.send(subscribeFrame);
}
// 发送消息
public void sendMessage(String content) {
String messageFrame = "SEND\ndestination:/app/chat\n\n" +
"{\"sender\":\"user\",\"content\":\"" + content + "\"}\n\x00";
webSocket.send(messageFrame);
}
}
三、集成测试与优化
心跳机制:设置定时心跳包防止连接断开
断线重连:实现自动重连逻辑提高稳定性
消息持久化:对重要消息进行本地存储,确保离线后能同步

浙公网安备 33010602011771号