Websocket保证接收消息完整性
Posted Hello
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
如果是完整的消息,直接进行处理;如果是消息的一部分,则缓存起来等待后续片段的到来
MQ怎么保证消息的稳定性和完整性?
业务说明:
某业务操作完成后,需要发送通知给其他人,比如,单据审批后,需要发送通知给下一审批人(张三),和单据提交人
情况分析:
1.业务操作完成后,调用mq发送消息失败,mq无法连接---发送问题
2.mq发送了,但消费者接收失败,没有接收,或者接收服务挂了 -----接收问题
3.消息的延迟性,如说明中的的审批情况,可能 张三 都已经处理了,但这条通知消息因为某种原因迟迟没有发出,导致最后收到过期的消息-----消息过期问题
方案:
根据如下图,解决1、2情况,情况3由消费者自己处理
以上是关于Websocket保证接收消息完整性的主要内容,如果未能解决你的问题,请参考以下文章