关于NIO和mina的一些应用场景

最近工作中有一个需求,因而产生了一个产品的demo.走了一些弯路,在这里写下来。

需求是这样: 我们需要一台网络客户端服务器,这台服务器做为客户端去连接上万台服务器,实时的从服务器读取不同的文本,然后解析,清洗,转换入库。对端文本服务器的ip:port 及对应的文本格式从通过一条连接获取,与爬虫不同的是要维持持久的长连接。

首先想到的是mina.虽然没有使用过,但mina的大名如雷贯耳。用mina来管理连接,使用filter来处理文本,最后handler统一入库。但是两天研究下来,发现mina并不能满足需求。

mina的典型应用是在服务端,Acceptor监听连接事件,有客户端到来时,建立连接丢给processor线程池处理,所有的IO统一经过一个filter链。

但是客户端和我想象的完全不同。首先一个Connector并不能管理上万的channel.其次所有的IO事件要经过统一的filter链处理,但需求要求每个连接只经过自己独特的解析转换流程。

mina的每个NIOConnector都会打开一个selector。作为一个客户端服务器需要创建很多channel,但selector却只能有一个或者几个。我想mina应该加入NIOClient的概念:用一个selector来管理很多channel的connector事件。

另外关于NIO性能,相比于传统阻塞IO,如果不需要管理大量IO任务的话,完全没必要使用NIO。开几十个线程能搞定的不要使用NIO,那样并不能增加性能,却增加不少的开发复杂度。NIO比IO性能好是因为,在高并发IO处理时,比如同时处理上万连接的WebServer,相比阻塞IO节省了无效的线程切换时间。低并发IO的线程切换时间占比很少,因此效果提升有限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值