如何用netty解码器实现需要与客户端多次交互的报文协议?

协议如下:
报文长度 | 报文状态 | 报文内容
(报文状态为重发包、有后续包、结束包)

客户端分批发送报文(因为报文内容很大),服务端每接收到一次报文后需要对报文做校验:

  • 校验成功则缓存报文,并向客户端发送确认包,客户端收到确认包后再次发送。
  • 校验失败则发送重发包,需要客户端重发

服务端如果用netty实现,如何缓存每次接收到的报文?

阅读 2.8k
2 个回答
✓ 已被采纳新手上路,请多包涵

解决方案:
Netty的bytebuf会缓存当前socket通信的信息,因此处理如下:
1、校验通过:ctx.writeAndFlush(确认包), decode方法return null
2、校验失败:ctx.writeAndFlush(重发包), decode方法return null
3、收到结束包: return super.decode(ctx, in)

报文内容是分批发送的,是客户端控制了?
服务器对报文做校验,是对协议中的报文内容做校验了?
可以理解为客户端对一个很大的报文,分段发送,每一段的报文服务器进行校验?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题