比如我用netty写服务端, 用简单的Socket来模拟客户端,像这样来向服务端发数据:
bos.write(data);
bos.flush();
这样就存在一个问题, 当客户端两次发送数据的时间间隔很短时, netty的channelRead(ChannelHandlerContext ctx, Object msg)
方法获取到的msg
里就可能会同时含有客户端的两次数据, 这样服务端在解析数据时就会出现问题. 想知道为什么会出现合并数据帧的问题, 以及该怎样去解决?
比如我用netty写服务端, 用简单的Socket来模拟客户端,像这样来向服务端发数据:
bos.write(data);
bos.flush();
这样就存在一个问题, 当客户端两次发送数据的时间间隔很短时, netty的channelRead(ChannelHandlerContext ctx, Object msg)
方法获取到的msg
里就可能会同时含有客户端的两次数据, 这样服务端在解析数据时就会出现问题. 想知道为什么会出现合并数据帧的问题, 以及该怎样去解决?
8 回答6.5k 阅读
4 回答690 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答967 阅读✓ 已解决
channel本来就是非阻塞的,所以获取到的并不是完全实时的数据,可能会有延迟,所以两次发送的数据服务端一次接收本身就是正常的。
关键的是,你不应该以“帧”来分隔数据,而应该自己约定一种分割方法。比如每一个数据都附带一个length,或者以若干个特殊的字节来作为分隔符,等。