is not a @Sharable handler解决方法


is not a @Sharable handler解决方法

 

昨天在写编码器的时候,因为是和spring整合,因此在使用编码的时候用Autowired自动注入

@Autowired private ProtocolDecoder protocolDecoder ; @Autowired private ProtocolEncoder protocolEncoder; 

结果在多个客户端连接(其实不是多客户端的问题)的时候导致一直在报错,如下

io.netty.channel.ChannelPipelineException: com.mzj.ProtocolDecoder is not a @Sharable handler, so can't be added or removed multiple times. 

于是我就自作聪明的将ProtocolDecoder上加了个@Sharable注解,结果在启动的时候就报错了。

Caused by: java.lang.IllegalStateException: ChannelHandler com.mzj.ProtocolDecoder is not allowed to be shared 

最后的解决方法是,不要使用单例了,每次添加handler的时候直接new

        pipeline.addLast("decoder",new ProtocolDecoder() ); pipeline.addLast("encoder",new ProtocolEncoder()) ; 

当然如果是在ChannelInitializer的子类报错说is not a @Sharable handler,一般情况加上@Sharable注解即可

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM