导读:不想细看就直接看红色部分,我最近会绘制图与仔细说哈自己的感受与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();
}
就这样运行
分享到:
相关推荐
在这个“MINA源码分析,内涵类的讲解”中,我们将深入探讨MINA的核心组件和设计模式,以便更好地理解和利用这个强大的框架。 首先,我们需要了解MINA的基础架构。MINA的核心是`IoService`接口,它定义了服务端和...
### Mina2源码分析——核心模块解析 #### 概述 Mina2是一个高性能、可扩展的网络应用框架,支持多种传输协议如TCP、UDP等,并提供了丰富的API供开发者使用。本文旨在深入剖析Mina2的核心部分,帮助读者更好地理解和...
在深入解析Mina源码的过程中,我们可以从以下几个关键知识点入手: 1. **Mina的过滤器机制实现**: Mina的核心设计理念之一是过滤器链(Filter Chain),它借鉴了Servlet的过滤器模型。每个过滤器都可以在数据传输...
在这个"apache-mina源码"中,我们可以深入理解MINA的设计原理和实现细节。 MINA的核心概念包括: 1. **IoSession**:IoSession是MINA中的核心组件,代表了服务端和客户端之间的连接。它包含了会话的状态信息,如...
四、Mina源码分析 1. Acceptor:负责监听端口并接受新连接。在Mina源码中,Acceptor是一个服务端的启动类,它创建了一个NioSessionAcceptor,用于处理客户端的连接请求。 2. ProtocolDecoder和ProtocolEncoder:这两...
通过源码分析,我们可以了解到MINA如何优化性能,比如减少线程上下文切换,使用NIO的selector提高并发能力等。这些知识对于提升自己编写网络程序的能力大有裨益。 通过上述分析,我们可以看出,MINA是一个强大的...
通过深入分析Mina2.0的源码,我们可以了解到其内部的事件驱动模型、网络通信机制以及如何通过过滤器和处理器来处理网络请求。这有助于我们更好地理解和利用Mina框架来开发高并发、高性能的网络应用。
Mina2源码分析 Mina2框架源码剖析是 Java 编程语言中一个流行的网络编程框架,用于构建高性能、可扩展的网络应用程序。该框架核心包包括 org.apache.mina.core.service, org.apache.mina.core.session, org.apache....
此外,源码分析还能帮助你掌握如何自定义Filter和Codec,以满足特定的应用场景需求。 总之,MINA 2.0.9源码为开发者提供了一个深入学习网络编程和异步I/O的好资源,通过研究和实践,开发者可以提升自己的网络应用...
### Mina2源码分析:深入理解IoService与IoProcessor 在探讨Mina框架的核心机制时,我们聚焦于`IoService`与`IoProcessor`,它们是Mina框架设计的灵魂,为实现高效、灵活的网络通信提供了坚实的基石。 #### ...
这个压缩包"mina学习资料与源码分析"包含了帮助你快速入门Mina、深入理解其工作原理和API的资源。下面,我们将深入探讨Mina的核心概念、功能以及如何利用它来开发网络应用。 Mina源于Java社区,其全称为“Minimal ...
2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤器链的工作方式等。 3. **编写简单的应用**:从例子入手,创建一个简单的MINA服务器和客户端,理解它们之间的通信机制。 4. **...
通过分析源码,我们可以看到Mina如何优雅地将网络编程的复杂性封装起来,让开发者可以更专注于应用的业务层面。同时,通过心跳机制,我们能够实时检测网络状况,确保服务的稳定性和可靠性。 总的来说,Mina框架提供...
Apache Mina2是一个高效的、可扩展的网络应用框架,主要用于简化Java NIO(非阻塞I/O)编程。它的核心组件包括`IoService`、`IoAcceptor`、`IoConnector`、`IoProcessor`和`IoHandler`,这些组件共同协作以处理网络...
源码分析还能帮助我们理解Java的多线程、并发控制和事件驱动编程等高级特性,提升我们的编程技能和解决问题的能力。 此外,对于Java开发者来说,熟悉Mina2源码有助于理解其他类似的网络通信框架,比如Netty,因为...
标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...
这个示例集合是为了学习和交流而准备的,开发者可以通过分析源码了解Mina如何处理网络通信,如何构建过滤器链,以及如何实现自定义的协议编码解码器。同时,这些示例也提供了实际操作的机会,便于开发者在遇到问题...
接下来,我们将逐步深入分析 Mina 2.0 的核心组件及其实现原理。 **2.1 IoAcceptor** `IoAcceptor` 接口是 Mina 2.0 中的核心接口之一,它代表了一个网络服务端点。通过该接口可以设置各种处理器、配置参数以及...
对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且高性能的网络应用程序...通过深入研究MINA源码,开发者可以提升网络编程技能,为构建高效、可伸缩的网络应用打下坚实基础。