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);
}

}
三、集成测试与优化
心跳机制:设置定时心跳包防止连接断开
断线重连:实现自动重连逻辑提高稳定性
消息持久化:对重要消息进行本地存储,确保离线后能同步

posted @ 2025-04-10 21:52  李蕊lr  阅读(7)  评论(0)    收藏  举报