Websocket保证接收消息完整性

用springboot起了个websocket服务端,有时候客户端发来的消息过长,无法接收完整,需要进行额外的处理

 

下面是处理的例子:

@ServerEndpoint("/websocket")
public class WebSocket {
    
    @OnMessage
    public void onMessage(Session session, byte[] message, boolean last) {
        if (last) {
            // 这是完整的消息,可以进行处理
            String text = decodeMessage(message);
            System.out.println("接收到完整的消息:" + text);
        } else {
            // 还需要接收后续消息片段
            ByteBuffer buffer = ByteBuffer.allocate(message.length);
            buffer.put(message);
            session.getUserProperties().put("message", buffer);
        }
    }
    
    private String decodeMessage(byte[] message) {
        // 在这里进行消息解码,返回解码后的字符串
        // 例如:假设消息是UTF-8编码的字符串,可以这样解码
        return new String(message, StandardCharsets.UTF_8);
    }
    

    
}

 

@OnMessage这也可以这样:

    @OnMessage
    public void onMessageContinued(Session session, byte[] message, boolean last) {
        ByteBuffer buffer = (ByteBuffer) session.getUserProperties().get("message");
        buffer.put(message);
        
        if (last) {
            // 这是完整的消息,可以进行处理
            String text = decodeMessage(buffer.array());
            System.out.println("接收到完整的消息:" + text);
            session.getUserProperties().remove("message");
        }
    }

 

如果是完整的消息,直接进行处理;如果是消息的一部分,则缓存起来等待后续片段的到来

 

posted @ 2023-04-06 20:44  Hello霖  阅读(441)  评论(0)    收藏  举报