gpt4 book ai didi

java - 处理 Netty 中的碎片

转载 作者:行者123 更新时间:2023-11-29 03:50:46 25 4
gpt4 key购买 nike

我正在使用 Netty 设计用于客户端/服务器通信的二进制协议(protocol),发送的字节数不是固定数量,可以是任意大小。

客户端正在发送这样的东西:

前4个字节表示一个id号剩下的字节是一个字符串

在我看到的例子中,消息是固定大小的,但是字符串内容可以是任意大小,并且需要确保它在被服务器接收时不会被碎片化。我如何在 Netty 中实现这一点?

提前致谢。

最佳答案

您如何确定消息的结尾?一个零?我会检查 Netty 重放解码器:

http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/codec/replay/ReplayingDecoder.html

它让事情变得简单。继续阅读直到找到零。如果在到达零之前用完了字节,将抛出异常以退出解码方法。当有更多字节可用时,将再次调用 decode 方法,将现有字节和新字节组合在一个 ChannelBuffer 中。

这个循环可以重复,直到您在 ChannelBuffer 中拥有整个消息...然后您可以将其传递到下一层进行处理。

如果可以更改您的协议(protocol),我会添加一个长度,因为能够读取长度比检查每个字节是否为零更有效。

关于java - 处理 Netty 中的碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8914268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com