netty Force-closing a channel whose registration task was not accepted by an event loop问题

这篇博客讲述了在使用Netty进行网络通信时遇到的问题:当关闭连接后,再次尝试连接会报错。问题根源在于全局变量中保存的EventLoopGroup没有正确关闭。博主通过将EventLoopGroup实例存储在安全线程的HashMap中并在关闭连接时从HashMap中取出并关闭,成功解决了这个问题。此外,还展示了Netty服务的启动和关闭方法以及发送消息的实现。

我这边第一次连接netty可以,但是关闭netty连接以后,再次使用连接就会报这个错,其实很简单的问题,但是一下子蒙住了,搞了半天,后来发现是全局变量的问题,

我把下面这两行代码放入了全局变量里,重启系统第一次连接没问题,关闭连接第二次开启连接就出现报错 Force-closing a channel whose registration task was not accepted by an event loop 连接不上。

 EventLoopGroup parentGroup = new NioEventLoopGroup();
 //负责网络的读写
 EventLoopGroup childGroup = new NioEventLoopGroup();

因为我还得需要通过接口关闭连接,针对上面问题我是这样改的

定义一个安全线程的hashmap用来存储EventLoopGroup 对象,在关闭资源方法里通过map取出来进行关闭,就不会出现这个问题了

@Component
public class NettyServer {
    private static Logger logger = LoggerFactory.getLogger(NettyServer.class);

    private ConcurrentHashMap mapEventLoopGroup = new ConcurrentHashMap();

    private Channel channel;

    // 开启连接
    public ChannelFuture bing(InetSocketAddress address) {
        // 配置服务端NIO线程组-负责接收客户端的连接
        EventLoopGroup parentGroup = new NioEventLoopGroup();
        //负责网络的读写
        EventLoopGroup childGroup = new
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值