使用netty通信会把两个间隔很短的数据帧合并成一个数据帧?

比如我用netty写服务端, 用简单的Socket来模拟客户端,像这样来向服务端发数据:

bos.write(data);
bos.flush();

这样就存在一个问题, 当客户端两次发送数据的时间间隔很短时, netty的channelRead(ChannelHandlerContext ctx, Object msg)方法获取到的msg里就可能会同时含有客户端的两次数据, 这样服务端在解析数据时就会出现问题. 想知道为什么会出现合并数据帧的问题, 以及该怎样去解决?

qq_遁去的一_1
浏览 796回答 2
2回答

德玛西亚99

channel本来就是非阻塞的,所以获取到的并不是完全实时的数据,可能会有延迟,所以两次发送的数据服务端一次接收本身就是正常的。 关键的是,你不应该以“帧”来分隔数据,而应该自己约定一种分割方法。比如每一个数据都附带一个length,或者以若干个特殊的字节来作为分隔符,等。

小怪兽爱吃肉

netty粘包拆包
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java