`
rrsy23
  • 浏览: 186301 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

MINA 源码分析

阅读更多

导读:不想细看就直接看红色部分,我最近会绘制图与仔细说哈自己的感受与MINA流程,欢迎探讨一起进步

 

刚刚读完MINA源码,解决了过去的困惑,但是多了一些新的困惑!

 

希望有研究的人指导探讨!

 

 SocketAcceptor acceptor = new NioSocketAcceptor();

        acceptor.setReuseAddress( true );
        acceptor.setHandler(new EchoProtocolHandler());
        acceptor.bind(new InetSocketAddress(PORT));

 

SocketAcceptor acceptor = new NioSocketAcceptor();

行代码 通过NioSocketAcceptor构造器 构造了SimpleIoProcessorPool实例包含几个NioProcessor实例NioProcessor实例包含同一个Executor实例

 

 

acceptor.bind(new InetSocketAddress(PORT));

这样服务器接到请求,就从SimpleIoProcessorPool选择一个NioProcessor实例处理数据【当然是其包含的Executor实力构造内部类Runable接口执行】

 

是从AbstractPollingIoAcceptor类startupAcceptor()方法

 private void startupAcceptor() {
        // If the acceptor is not ready, clear the queues
        // TODO : they should already be clean : do we have to do that ?
        if (!selectable) {
            registerQueue.clear();
            cancelQueue.clear();
        }

        // start the acceptor if not already started
        synchronized (lock) {
            if (acceptor == null) {
                acceptor = new Acceptor();
                executeWorker(acceptor);
            }
        }
    }

 

 private class Acceptor implements Runnable {
        public void run() {
            int nHandles = 0;

            while (selectable) {
                try {
                 
                    int selected = select();

                  
                    nHandles += registerHandles();

                    if (selected > 0) {
                     
                        processHandles(selectedHandles());
                    }

                  
                    nHandles -= unregisterHandles();

                    if (nHandles == 0) {
                        synchronized (lock) {
                            if (registerQueue.isEmpty()
                                    && cancelQueue.isEmpty()) {
                                acceptor = null;
                                break;
                            }
                        }
                    }
                } catch (Throwable e) {
                    ExceptionMonitor.getInstance().exceptionCaught(e);

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e1) {
                        ExceptionMonitor.getInstance().exceptionCaught(e1);
                    }
                }
            }

            // Cleanup all the processors, and shutdown the acceptor.
            if (selectable && isDisposing()) {
                selectable = false;
                try {
                    if (createdProcessor) {
                        processor.dispose();
                    }
                } finally {
                    try {
                        synchronized (disposalLock) {
                            if (isDisposing()) {
                                destroy();
                            }
                        }
                    } catch (Exception e) {
                        ExceptionMonitor.getInstance().exceptionCaught(e);
                    } finally {
                        disposalFuture.setDone();
                    }
                }
            }
        }
  processHandles(selectedHandles());

  private void processHandles(Iterator<H> handles) throws Exception {
            while (handles.hasNext()) {
                H handle = handles.next();
                handles.remove();

                // Associates a new created connection to a processor,
                // and get back a session
                T session = accept(processor, handle);
               
                if (session == null) {
                    break;
                }

                initSession(session, null, null);
              System.out.print("bobo-->"+session.getProcessor().getClass());
                // add the session to the SocketIoProcessor
                session.getProcessor().add(session);
            }
        }
    }
 T session = accept(processor, handle);

session.getProcessor().add(session);
session.getProcessor()实例是

SimpleIoProcessorPool对象

 public final void add(T session) {
        getProcessor(session).add(session);
    }

 

getProcessor(session)实例是NioProcessor他的父类AbstractPollingIoProcessor

 public final void add(T session) {
        if (isDisposing()) {
            throw new IllegalStateException("Already disposed.");
        }

        // Adds the session to the newSession queue and starts the worker
        newSessions.add(session);
        startupProcessor();
    }

  private void startupProcessor() {
        synchronized (lock) {
            if (processor == null) {
                processor = new Processor();
                executor.execute(new NamePreservingRunnable(processor, threadName));
            }
        }
       
        // Just stop the select() and start it again, so that the processor
        // can be activated immediately.
        wakeup();
    }

就这样运行

2
0
分享到:
评论
6 楼 rrsy23 2010-06-04  
没有具体研究

但是我认为MINA是主要工作是通信

上传路径,你可以自己在chain上写个自己的策略或者配置什么的啊;

原来那些开源的上传怎么做的?思考ha
5 楼 qyhdt 2010-05-29  
上传的文件设定服务器文件存放路径,可否有解? 做了几次都失败了
4 楼 rrsy23 2009-07-23  
呵呵 可以 自己写个 mockMina

就4,5个类 实现个简单的
3 楼 hardPass 2009-07-20  
这部分代码看得我眼睛疼,跳来啊跳去。
我想,要是把mina这些代码精简一下,也不要搞太多继承,顺序搞得清楚一点。
那就好了。

对头,搞个mina的精简版,不知道大家喜欢啊?
2 楼 rrsy23 2009-07-20  
不知道你想了解什么,可以说清楚点!

工作他的example有代码

如果不清楚 你就信了解哈 java nio的scocket那部分
1 楼 granjoy 2009-07-20  
仔细讲一下哈。
最近拿red5做项目,不知道Mina怎么工作的。

相关推荐

    MINA源码分析,内涵类的讲解

    在这个“MINA源码分析,内涵类的讲解”中,我们将深入探讨MINA的核心组件和设计模式,以便更好地理解和利用这个强大的框架。 首先,我们需要了解MINA的基础架构。MINA的核心是`IoService`接口,它定义了服务端和...

    Mina2源码分析

    ### Mina2源码分析——核心模块解析 #### 概述 Mina2是一个高性能、可扩展的网络应用框架,支持多种传输协议如TCP、UDP等,并提供了丰富的API供开发者使用。本文旨在深入剖析Mina2的核心部分,帮助读者更好地理解和...

    Mina源码解析

    在深入解析Mina源码的过程中,我们可以从以下几个关键知识点入手: 1. **Mina的过滤器机制实现**: Mina的核心设计理念之一是过滤器链(Filter Chain),它借鉴了Servlet的过滤器模型。每个过滤器都可以在数据传输...

    apache-mina源码

    在这个"apache-mina源码"中,我们可以深入理解MINA的设计原理和实现细节。 MINA的核心概念包括: 1. **IoSession**:IoSession是MINA中的核心组件,代表了服务端和客户端之间的连接。它包含了会话的状态信息,如...

    Mina学习资料

    四、Mina源码分析 1. Acceptor:负责监听端口并接受新连接。在Mina源码中,Acceptor是一个服务端的启动类,它创建了一个NioSessionAcceptor,用于处理客户端的连接请求。 2. ProtocolDecoder和ProtocolEncoder:这两...

    mina 源码

    通过源码分析,我们可以了解到MINA如何优化性能,比如减少线程上下文切换,使用NIO的selector提高并发能力等。这些知识对于提升自己编写网络程序的能力大有裨益。 通过上述分析,我们可以看出,MINA是一个强大的...

    Mina2.0框架源码剖析

    通过深入分析Mina2.0的源码,我们可以了解到其内部的事件驱动模型、网络通信机制以及如何通过过滤器和处理器来处理网络请求。这有助于我们更好地理解和利用Mina框架来开发高并发、高性能的网络应用。

    Mina2源码分析.docx

    Mina2源码分析 Mina2框架源码剖析是 Java 编程语言中一个流行的网络编程框架,用于构建高性能、可扩展的网络应用程序。该框架核心包包括 org.apache.mina.core.service, org.apache.mina.core.session, org.apache....

    MINA 2.0.9源码

    此外,源码分析还能帮助你掌握如何自定义Filter和Codec,以满足特定的应用场景需求。 总之,MINA 2.0.9源码为开发者提供了一个深入学习网络编程和异步I/O的好资源,通过研究和实践,开发者可以提升自己的网络应用...

    mina2源码分析

    ### Mina2源码分析:深入理解IoService与IoProcessor 在探讨Mina框架的核心机制时,我们聚焦于`IoService`与`IoProcessor`,它们是Mina框架设计的灵魂,为实现高效、灵活的网络通信提供了坚实的基石。 #### ...

    mina学习资料与源码分析

    这个压缩包"mina学习资料与源码分析"包含了帮助你快速入门Mina、深入理解其工作原理和API的资源。下面,我们将深入探讨Mina的核心概念、功能以及如何利用它来开发网络应用。 Mina源于Java社区,其全称为“Minimal ...

    mina源码+例子mina-2.0.0-M6.zip

    2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤器链的工作方式等。 3. **编写简单的应用**:从例子入手,创建一个简单的MINA服务器和客户端,理解它们之间的通信机制。 4. **...

    Mina 框架源码解析-构建简单通信程序

    通过分析源码,我们可以看到Mina如何优雅地将网络编程的复杂性封装起来,让开发者可以更专注于应用的业务层面。同时,通过心跳机制,我们能够实时检测网络状况,确保服务的稳定性和可靠性。 总的来说,Mina框架提供...

    Mina2源码分析.doc

    Apache Mina2是一个高效的、可扩展的网络应用框架,主要用于简化Java NIO(非阻塞I/O)编程。它的核心组件包括`IoService`、`IoAcceptor`、`IoConnector`、`IoProcessor`和`IoHandler`,这些组件共同协作以处理网络...

    Java mina2源码

    源码分析还能帮助我们理解Java的多线程、并发控制和事件驱动编程等高级特性,提升我们的编程技能和解决问题的能力。 此外,对于Java开发者来说,熟悉Mina2源码有助于理解其他类似的网络通信框架,比如Netty,因为...

    mina2 源码 mina

    标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...

    Mina 1.1.7 示例源码(apache.mina.example)

    这个示例集合是为了学习和交流而准备的,开发者可以通过分析源码了解Mina如何处理网络通信,如何构建过滤器链,以及如何实现自定义的协议编码解码器。同时,这些示例也提供了实际操作的机会,便于开发者在遇到问题...

    Mina 2.0快速入门与源码解析

    接下来,我们将逐步深入分析 Mina 2.0 的核心组件及其实现原理。 **2.1 IoAcceptor** `IoAcceptor` 接口是 Mina 2.0 中的核心接口之一,它代表了一个网络服务端点。通过该接口可以设置各种处理器、配置参数以及...

    apache-mina-2.0.4.rar_apache mina_mina

    对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...

    apache下的mina框架的源码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且高性能的网络应用程序...通过深入研究MINA源码,开发者可以提升网络编程技能,为构建高效、可伸缩的网络应用打下坚实基础。

Global site tag (gtag.js) - Google Analytics