我这边第一次连接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

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





