协议如下:
报文长度 | 报文状态 | 报文内容
(报文状态为重发包、有后续包、结束包)
客户端分批发送报文(因为报文内容很大),服务端每接收到一次报文后需要对报文做校验:
- 校验成功则缓存报文,并向客户端发送确认包,客户端收到确认包后再次发送。
- 校验失败则发送重发包,需要客户端重发
服务端如果用netty实现,如何缓存每次接收到的报文?
协议如下:
报文长度 | 报文状态 | 报文内容
(报文状态为重发包、有后续包、结束包)
客户端分批发送报文(因为报文内容很大),服务端每接收到一次报文后需要对报文做校验:
服务端如果用netty实现,如何缓存每次接收到的报文?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
解决方案:
Netty的bytebuf会缓存当前socket通信的信息,因此处理如下:
1、校验通过:ctx.writeAndFlush(确认包), decode方法return null
2、校验失败:ctx.writeAndFlush(重发包), decode方法return null
3、收到结束包: return super.decode(ctx, in)