前些天,在项目测试时遇到一个bug,即IOS客户端传输给服务端数据时,时而成功,时而失败,并导致客户端与服务端断开连接,不接收任何消息。后来打印 websocket的关闭原因,才知道是传输的消息过长导致。
通过在网上查找资料,才知道websocket的文本消息传输,协议允许的长度不超过127,那么,对于超出范围的消息又怎么进行传输呢?对此,网友给出的答案,采用自定义协议、消息分片发送、改websocket为长连接或轮训;思量下来,还是决定采用消息分片处理的方式来处理消息。
首先,我们要自定义一个消息处理器,实现MessageHandler.Partial接口,MessageHandler接口中有两个接口,一个是Partial,另一个是Whole接口,Partial用于接收部分消息,Whole用于一次性接收一条完整的消息。实现代码如下:
代码片段上面代码中的last参数是一个结束传输的标识,如果消息是最后一条消息,则last为true,当客户端分片发送消息时,服务端接收消息会不断的调用 onMassege方法。另外,当自定义的消息处理器完成后,我们还需要对该处理器在session中注册,即在@OnOpen修饰的方法中添加: session.addMessageHandler(new LangTextHandle(session,serial));
鉴于本人文笔有限,请多多包涵,如有需要查询更详细的资料原文资料,请移步此处。
网友评论