netty服务器在接收消息后,怎么向另一台服务器传递消息

netty服务器在接收消息后,怎么向另一台服务器传递消息,第1张

第一种,netty服务器接收到消息后,在channelRead方法里可以在起一个客户端,通过这个客户端向另一台服务器传递消息。第二种,创建一个消息中转的类,这个类可以接收消息,然后创建一个netty客户端再将消息中转类的消息传递给另一台服务器。两种都可以,只是第一种是内置客户端,个人觉得第二种更灵活,不过我在做的时候采用的是第一种方法。

业务场景:跟设备通信,不同的厂家有不同的协议,这时后台服务要兼容,比如说,设备A使用的是String字符串,设备B使用的是byte[],这时候该怎么处理呢,使用自定义解码器,去识别是String,还是byte[],然后转发给相应的业务handler处理

Client测试,模拟两个发送不同协议数据的客户端

用到的工具类

下面是整个过程中的数据流向

注:在服务端检测到客户端断线后,服务端主动关闭连接,这时候会报这个错误,

io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1

at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:101) ~[netty-all-4.0.28.Final.jar:4.0.28.Final];

解决办法:

1、添加ByteBuf.retain()生产上handler继承的是SimpleChannelInboundHandler,解决办法是下面这样处理

原因参考:

https://emacsist.github.io/2018/04/28/netty%E4%B8%AD%E5%B8%B8%E8%A7%81%E7%9A%84illegalreferencecountexception%E5%BC%82%E5%B8%B8%E5%8E%9F%E5%9B%A0%E5%8F%8A%E8%A7%A3%E5%86%B3/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8592334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存