请选择 进入手机版 | 继续访问电脑版

默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求助客户端与Netty服务端通信,大量消息时会有丢包问题
服务端:1、ServerInitializer继承ChannelInitializer<SocketChannel> ,
重写initChannel方法,里面
pipelie.addLast(new ProtobufEncoder());
pipelie.addLast(new ProtobufDencoder(xxxx));
pipelie.addLast(new ServerHandler());
2、ServerHandler继承SimpleChannelInboundHandler<xxxx>,重写channelRead0方法。

客户端:
1、ClientInitializer继承ChannelInitializer<SocketChannel> ,
重写initChannel方法,里面
pipelie.addLast(new ProtobufEncoder());
pipelie.addLast(new ProtobufDencoder(xxxx));
pipelie.addLast(new ServerHandler());
2、ClientHandler继承SimpleChannelInboundHandler<xxxx>,重写channelRead0方法,channelActive方法,

在channelActive方法里面写个for循环给服务器发送消息,ctx.writeAndFlush(message);

问题:
1、服务器收到的包跟客户端发过来的包不对应,存在丢包,比如客户端发连续发1000次过来,可能会收到800次。
2、但是如果客户端的ctx.writeAndFlush(message); 后写Thread.sleep(500); 服务器就不会丢包

以上问题是什么原因导致的?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:Netty 求助
上一篇:为什么Netty的ChannelOutboundHandler会声明一个read方法下一篇:脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?
推荐方案
评论 3
是粘包了吗。
服务端有没有异常打出来
签名: 《微信支付代码重构带来的移动端软件架构上的思考》http://www.52im.net/thread-2958-1-1.html
引用:JackJiang 发表于 2020-02-24 23:15
是粘包了吗。
服务端有没有异常打出来

netty的 ProtobufEncoder()  和  ProtobufDencoder() 不是解决了粘包和拆包问题了吗? 自己自定义编码解码协议,继承MessageToByteEncoder / ReplayingDecoder 则正常!
签名: 有志者事竟成
注意看ProtobufDecoder的注释部分,“Please note that this decoder must
* be used with a proper {@link ByteToMessageDecoder} such as {@link ProtobufVarint32FrameDecoder}
* or {@link LengthFieldBasedFrameDecoder} ”   需要添加一个恰当的ByteToMessageDecoder
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部