`
ahuango
  • 浏览: 55618 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Apache Mina 初步接触之架构

    博客分类:
  • J2SE
阅读更多
最近在项目中使用了Apache Mina,看了网站的文档,对于使用来说是比较简单的。

由于之前对于NIO有所了解但是并不深刻,想借这个机会好好研究一下Mina的实现。Java NIO 使用了Reactor模式进行开发,所谓Reactor模式类似于Observer模式,都属于事件触发的。Java NIO的工作模型如下图所示:


<Refer [1]>

首先,需要创建一个Selector, 一般是通过Selector.open()来实现
然后,创建一个ServerSocketChannel,并绑定到本地端口
最后注册此channel到selector,并设置interest ops 为ACCEPT
等到客户端连接产生后,selector会得到相应 的SelectionKey,并根据event类型由相应的Handler处理

但是作为一个服务端程序,要考虑的因素有很多,这样简单的工作模型是远远不够的,常见的NIO 架构往往是这样的:



<Refer [1]>

最前端是一个Acceptor,专门处理客户端的新连接
被accept的socket channel,会注册到一个新的Selector,这个selector只对Read/Write的事件感兴趣,此时这些工作都在一个Dispatcher Pool中完成。 Pool中的Dispatcher则将事件处理Dispatch到Worker线程,由他们进行数据读写,最后调用应用相关的处理器响应请求。

在Mina中,相应的架构略有不同,它的Dispatcher跟Worker是1对1的关系,而且一个Dispatcher是处理多个Session的,同样它的Worker也是需要处理多个连接的。不知道这样会不会导致性能的下降?比如Worker顺序处理的多个任务中,第一个任务耗时比较长,那么后续的请求就会被阻塞。




Reference:
[1] http://today.java.net/pub/a/today/2007/02/13/architecture-of-highly-scalable-nio-server.html
  • 大小: 24.7 KB
  • 大小: 29.3 KB
  • 大小: 19 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics