用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");
}
}
如果是完整的消息,直接进行处理;如果是消息的一部分,则缓存起来等待后续片段的到来
标签:Websocket,buffer,text,session,完整性,消息,ByteBuffer,message,接收 From: https://www.cnblogs.com/Hello233/p/17294124.html