这与我关于统一设置的问题有关(具有持久通道的端口统一)
我正在尝试为我的协议发送一个以所有流量为前缀的两个字节序列;我正在这样做,所以当我更新以支持多个协议时,统一处理程序中有一些东西需要嗅探。
在客户端,我在管道末端有一个简单的出站处理程序,它在 ByteBuf 前面加上两个协议标识字节,在服务器管道前面有一个简单的入站处理程序,它将提取它们。我已经设法让它适用于小消息。
服务器队列中的后续处理程序是LengthFieldBasedFrameDecoder
我用来构建传入流量(protobuf 对象)的一个处理程序。似乎正在发生的是客户端发送了一个大请求,例如 5M。我得到了一系列通过服务器管道的 64k 缓冲区,其中最后一个缓冲区超过了LengthFieldBasedFrameDecoder
等待的阈值,它提取帧并将其传递给处理——这发生正确。
在这一点上,一切都破裂了。据我所知,来自客户端的最后一个 64k 缓冲区包含帧的其余数据、表示下一个请求开始的 2 字节序列,然后是更多内容。我认为这些数据位于帧解码器中,它现在将使用两个协议魔术字节作为下一帧的长度,这是不正确的,并且事情从那里分解。
DelimiterBasedFrameDecoder
看起来它在这种情况下会起作用,因为这两个字节序列将分解每个逻辑帧/请求,但在这种情况下这似乎有点过分了。
在这种情况下是否有其他解码器可以使用,还是我应该坚持使用DelimiterBasedFrameDecoder
?