在apache  mina创建之初作者就开始讨论SEDA在mina中的应用。在mina官网中也配置mina的线程模型时,也提及SEDA。那让我们看看SEDA在apache mina中的应用吧。

1 -通过队列queue把服务分成多个stages.

1.1 每一个阶段执行请求过程中的一个部分。1.2 阶段内部通过事件驱动,特别是非阻塞模型 。1.3 用队列来区分边界

2 每一个阶段包含一个线程池来驱动阶段的执行.

2.1 每一个阶段中的线程池不会暴露给应用程序  2.2 根据需要动态控制线程池

3  最好的区分事件和线程

3.1 根据事件流来明确来明确编程逻辑

接下来,我们以apache mina的服务器端来分析SEDA架构在mina中是如何应用的?

在apache  mina服务器端通过把整个应该程序划分为4个阶段。

Acceptor阶段  ----->newSessions 队列---->Processor 阶段--->IoFilterChain 队列-->ExecutorFilter阶段-->--->waitingSessions 队列--->业务处理阶段

紧接着我们把每一阶段具体实现来分析一下:

1 -Acceptor阶段。

    /*** This class is called by the startupAcceptor() method and is* placed into a NamePreservingRunnable class.* It's a thread accepting incoming connections from clients.* The loop is stopped when all the bound handlers are unbound.*/private class Acceptor implements Runnable {public void run() {}
}
    /** A Session queue containing the newly created sessions */private final Queue<S> newSessions = new ConcurrentLinkedQueue<S>();
    public final void add(S session) {if (disposed || disposing) {throw new IllegalStateException("Already disposed.");}// Adds the session to the newSession queue and starts the workernewSessions.add(session);startupProcessor();}

Acceptor阶段是接收新socket进来,然后把IoSession加入到newSessions队列中。通过startupProcessor()方法来启动下一个阶段线程。

在Acceptor阶段是通过Acceptor 线程来驱动事件的。当int selected = select(); 事件发生时,表示新socket的来临。

2 -Processor 阶段。

    /*** The main loop. This is the place in charge to poll the Selector, and to* process the active sessions. It's done in* - handle the newly created sessions* -*/private class Processor implements Runnable {public void run() {}
}
    /** A queue used to store the sessions to be removed */private final Queue<S> removingSessions = new ConcurrentLinkedQueue<S>();/** A queue used to store the sessions to be flushed */private final Queue<S> flushingSessions = new ConcurrentLinkedQueue<S>();

Processor 阶段主要处理Socket的输入输出流。在这个阶段涉及到removingSessions队列和flushingSessions 队列。

已读取数据为例,在IoFilterChain过滤链中,触发messageReceived事件来驱动。

3 -ExecutorFilter 阶段。

当ExecutorFilter接收到messageReceived 事件时,会把消息分发到OrderedThreadPoolExecutor线程池中。

    private class Worker implements Runnable {private volatile long completedTaskCount;private Thread thread;public void run() {}
}
    /** A queue used to store the available sessions */private final BlockingQueue<IoSession> waitingSessions = new LinkedBlockingQueue<IoSession>();

该阶段由Worker线程来驱动事件。在该阶段中waitingSessions 队列来区分边界。

4-业务处理阶段。

在最后阶段,为应用程序处理阶段。该阶段可以定义业务处理的线程。在Fix协议中定义一个IoSession一个线程来处理的。

1 队列主要负责进入控制策略

2-队列分割执行边界

3-明确事件分发,支持监控

apache mina 与 SEDA相关推荐

  1. Apache Mina开发手册

    作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.介绍 Apache Mina是一个网络应用框架,简化用户开发高性能.高可扩展性的网络应用程序的难度.M ...

  2. Apache MiNa 2 学习笔记

    http://blog.csdn.net/cgwcgw_/article/details/18402769 http://download.csdn.net/detail/xiaozhu_1986/2 ...

  3. Apache mina,Netty的起源和历史

    Genesis of MINA    by Trustin Lee   文章来自:Apache mina   http://mina.apache.org/mina-project/road-map. ...

  4. Apache Mina 介绍

    为什么80%的码农都做不了架构师?>>>    1.MINA 框架简介 下图为本人根据对MINA的简要理解,所画出来的框架简图: Apache MINA 是一个网络应用框架,有助于用 ...

  5. java Mina sftp_java – 使用Apache Mina作为模拟/内存SFTP服务器进行单元测试

    我正在解决如何使用Apache Mina的麻烦.他们的文档对我无能为力的大脑来说有一点不足.我已经看到了有用的起始代码 Java SFTP server library? 我无法想像的是如何使用它.我 ...

  6. 搭建Apache Mina框架并实现Server与Client端的简单消息传递

    http://www.himigame.com/apache-mina/831.html :(作者新浪微博: @李华明Himi ) 转载自[黑米GameDev街区] 原文链接: http://www. ...

  7. 使用 Apache MINA 开发高性能网络应用程序

    http://www.ibm.com/developerworks/cn/opensource/os-cn-apmina/ Apache MINA(Multipurpose Infrastructur ...

  8. Apache MiNa 实现多人聊天室

    Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...

  9. Apache Mina Demo

    Mina主要是作为服务器端底层框架来实现数据处理,它的实现很简单,如下例所示: view plaincopy to clipboardprint? package com.gftech.mytool. ...

最新文章

  1. 「UI 测试自动化selenium」汇总
  2. 【Python】用Python实现PDF文件分割和合并
  3. Objective-C学习笔记--NSLog用法及例子
  4. geoserver 3_SD 2-3/15 PR调速阀德国HAWE哈威
  5. iPhone和Android的区别,从警示框看iPhone与Android的区别
  6. 男女薪酬差异扩大 2018年女性薪酬不及男性8成?
  7. 软件工程学习进度第三周暨暑期学习进度之第三周汇总
  8. The word is not correctly spelled问题解决
  9. 创建phpinfo.php
  10. linux命令完整篇
  11. C++ Qt 压缩与解压缩代码演示
  12. Hybrid App实现原理
  13. 什么是运维高手的境界?
  14. python人像美颜_人像美颜美妆算法入门必备
  15. SAS数据导入input要点
  16. Codeforces Young Physicist
  17. WPS删除粘贴后的[]中括号痕迹
  18. java pdf 修改内容_Java PDFBox – 读取和修改带有特殊字符的pdf(变音符号)
  19. win8无法打开Oracle 12c的企业管理控制台解决方案
  20. google chrome主页被毒霸篡改解决方式

热门文章

  1. 聚类分析实验(一)数据预处理
  2. DBCO-PEG-Casein/Ovalbumin/Lectins点击化学DBCO偶联络蛋白/卵清蛋白/凝集素
  3. 笔记本电池的保养方法 如何正确使用及保护笔记本电池
  4. linux c mysql安装_Linux下MySQL的安装
  5. 1.5 关于本书及如何充分应用本书
  6. 一篇文章带你搞定 Java 日志框架 slf4j
  7. Android仿miui11风格,分享一款MIUI11主题,圆润小清新风格,状态栏好评
  8. 软硬件全开源5种操作系统迅为IMX6开发板稳定运行看得见
  9. 写作技巧:如何在word里优雅的插入代码
  10. 使用C3D的一些问题