Netty客户端断线重连实现及问题思考( 七 )


public boolean connect() {try {ChannelFuture channelFuture1 = bootstrap.connect("127.0.0.1", 8088);ChannelFuture channelFuture2 = bootstrap.connect("127.0.0.1", 8088);ChannelFuture channelFuture3 = bootstrap.connect("127.0.0.1", 8088);} catch (Exception e) {exceptionHandler(e);}clientChannel.close();return false;}3.如果netty客户端线程数设置大于1有什么影响么?
明显的异常肯定是不会有的,但是造成资源浪费,首先会创建多个NioEventLoop对象,但NioEventLoop是处于非运行状态 。一旦出现断线重连,那么重新连接时,下一个NioEventLoop则会被选中,并创建/启动线程一直处于runnable状态 。而上一个NioEventLoop也是一直处于runnable状态,由于上一个Channel已经被close,所以会造成每次select结果都是空的,没有意义的空轮询 。
如下则是netty客户端使用默认线程数,4次断线重连后一共创建的5条NioEventLoop线程,但是实际上只有第5条线程在执行读写操作 。

Netty客户端断线重连实现及问题思考

文章插图
 

Netty客户端断线重连实现及问题思考

文章插图
 
4.如果客户端存在耗时的业务逻辑,应该单独使用业务线程池,避免在netty的io线程中执行耗时逻辑处理 。
总结本篇主要讲解了,netty断线重连的两种实现方案,以及实现过程中遇到的异常问题,通过分析问题,让大家了解netty的实现细节 。
来源:blog.csdn.net/u013202238/article/details/111680798




推荐阅读