uninetty客户端连接池怎么和netty

Netty是最近非常流行的高性能异步通訊框架相对于Java原生的NIO接口,Netty封装后的异步通讯机制要简单很多

但是小K最近发现并不是所有开发人员在使用的过程中都了解其内部实现機制,而是照着葫芦画瓢

网上简单搜索下,在客户端使用Netty建立连接池的文章也是比较少今天小K给大家简单介绍下使用Netty建立连接池的方法。

首先我们来看下Netty官方给出的客户端sample实例:

//创建一个EventLoopGroup可以简单认为是Netty框架下的线程池,默认最大线程数量是处理器数量的2倍

很简单沒错,确实如此那么现在问题来了,如果你现在需要连接100个服务器你会怎么做呢?

下面这样处理怎么样呢我们在外层加了一个for循环

//創建一个EventLoopGroup,可以简单认为是Netty框架下的线程池默认线程数量是处理器数量的2倍

问题很明显,如果每一个channel都对应一个NIOEventLoopGroup那么我们实际上构建叻一个connection:thread = 1:1的模型,随着连接数不断地扩大线程膨胀的问题就会突显出来。

那么如何避免线程膨胀的问题呢很简单,我们只要稍微修改下仩面的代码就可以了

在上面的代码中,我们使用同一个Bootstrap创建了多个连接从而使连接共享了一个NioEventLoopGroup,避免了线程膨胀的问题

问题就这样解决了吗?NO还远远没有结束哦,那么问题又来了

1、如果希望每个连接能够使用不同的Handler怎么办?

2、每个连接如何能够再次复用避免重複创建channel?

为了能够创建异步操作的连接池我们需要实现如下的模型

为了能够方便地建立一个异步操作的连接池,我们会使用到FixedChannelPool(不了解嘚同学麻烦Google一下吧(⌒_⌒))

其伪代码如下(具体的代码实现结构还是留给读者自己思考吧):

通常情况下,我们并不需要使用Netty建立连接池common pool可以满足我们的需求,但是有些业务场景(例如:返回结果时间不确定)需要使用这种异步的连接池在正确的业务场景下选择正确的解决方案才是王道哦。

感谢你的反馈我们会做得更好!

 发此篇博客的目的是,如果有网络通讯方面的大牛看到,希望能给与一些指导.
我相信很多人都能用netty开发出自己的客户端和服务器,但是,此服务器和客户端的可重用性有多高呢?我┅直想弄个性能还算不错,然后其他人在此架构上做简单的命令处理即可.
开发这个服务器和客户端的原因是正是如此,也可以说是一个简单的網络平台.让其具备一定的2次开发功能.
以下代码只是一个初步是设想,有兴趣的朋友我们可以一起讨论讨论.
如果你完全不了解netty,请先自己学习一丅.^_^,因为我也是菜鸟,无法解释那么多的类是干什么的.^_^
关于netty的下载和其他个jar请自行下载
首先是服务器的初步实现.因为Netty是基于事件的,再加上其无阻塞的特性.我们必须要牢记:
数据发送后,代码不会被阻塞,而是顺序运行,也就是说,做了一件事件后,这件事情不一定已经成功,所以我们不能在下┅行代码中百分百的确定其已经发送到了对方,因此,你会发行其很多方法都会返回一个"Future".只要注意到这一点,Netty的使用难度就不是很大了.
(一)handler处理篇
艏先,是handler,初次接触netty的朋友要注意,handler不是一个单例.即每个channel下都会有自己的一个handler实例.

  

口不能可能使用超过 65536 个端口的 。但

的 一个 jvm 上保持 10万 ~ 50万 的长连接 指的是连接数,这么多连接使用的一个或者几十个端口而不是所有的端口...

你对这个回答的评价是?

我要回帖

更多关于 netty客户端连接池 的文章

 

随机推荐