不推荐使用Netty自带连接池ChannelPool

首先,网上关于Netty自带连接池ChannelPool的文章很少,推测一下原因可能是因为大家使用Netty时多数都是做为服务端来应用,因此基本上用不到连接池。但是如果你使用Netty封装一个HTTP客户端那就必须考虑Channel池了。

不推荐使用内置ChannelPool的原因如下:

  • 没有健康检查机制
    如果server端关闭了连接,那么池中的某个channel会无效,由于缺乏健康检测,这个无效的channel还是会被调用方获取到。
  • 无法剔除(evict)指定Channel
    这个池居然只能添加Channel而不能删除!也就是说如果你明确知道了哪个Channel已经被关闭了,你也没有办法把这个Channel从池中剔除掉,简直了
  • 无法动态控制连接数
    我们在使用数据库连接池的时候都会配置类似于maxActive, maxIdle之类的参数,意思是池中最大允许有多少连接、最大空闲连接等。我们希望能在空闲的时候主动释放掉一些连接来节省资源,繁忙的时候可多创建一些连接。这应该是非常基本的功能了吧,不好意思,不支持!

所以,这个池如果你只是用来写写玩具代码然后发个博客还是没问题的,生产环境就算了,还是使用apache的对象池或者自己实现一个吧。

posted @ 2019-06-10 18:34  司青  阅读(16)  评论(0)    收藏  举报  来源