<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单之美 &#187; Category &#187; Mina</title>
	<atom:link href="http://shiyanjun.cn/archives/category/opensource/mina/feed" rel="self" type="application/rss+xml" />
	<link>http://shiyanjun.cn</link>
	<description>简单之美，难得简单，享受简单的唯美。</description>
	<lastBuildDate>Wed, 04 Mar 2026 07:04:53 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.2</generator>
	<item>
		<title>Mina框架IoSession详解</title>
		<link>http://shiyanjun.cn/archives/319.html</link>
		<comments>http://shiyanjun.cn/archives/319.html#comments</comments>
		<pubDate>Tue, 03 Sep 2013 12:29:07 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=319</guid>
		<description><![CDATA[<p>通过Mina官 网文档，我们可以看到，有如下几个状态：

Connected : the session has been created and is available
Idle : the session hasn&#8217;t processed any request for at least a period of time (this period is configurable)Closing : the session is being closed (the remaining messages are being flushed, cleaning up is not terminated)

Idle for read : no read has actually been made for a period of time
Idle for write : no write has actually been made for a period of time
Idle for both : no read nor write for a period of time

Closed : The session is now closed, nothing else can be done to revive it.

对应的状态迁移图，如图所示：

通过上面的状态图，我们可以看出，是哪个事件的发生使得IoSession进入哪个状态，比较直观明了。下面，我们看一下IoSession对应的设计，类继承关系如下所示：

对于IoSession接口类，我在上图把具有不同类型功能的操作进行了分类，说明如下：

一个IoSession实例可以访问/持有哪些数据</p>]]></description>
	<p>通过Mina官 网文档，我们可以看到，有如下几个状态：

Connected : the session has been created and is available
Idle : the session hasn&#8217;t processed any request for at least a period of time (this period is configurable)Closing : the session is being closed (the remaining messages are being flushed, cleaning up is not terminated)

Idle for read : no read has actually been made for a period of time
Idle for write : no write has actually been made for a period of time
Idle for both : no read nor write for a period of time

Closed : The session is now closed, nothing else can be done to revive it.

对应的状态迁移图，如图所示：

通过上面的状态图，我们可以看出，是哪个事件的发生使得IoSession进入哪个状态，比较直观明了。下面，我们看一下IoSession对应的设计，类继承关系如下所示：

对于IoSession接口类，我在上图把具有不同类型功能的操作进行了分类，说明如下：

一个IoSession实例可以访问/持有哪些数据</p>			<content:encoded><![CDATA[<p>通过Mina官 网文档，我们可以看到，有如下几个状态：

Connected : the session has been created and is available
Idle : the session hasn&#8217;t processed any request for at least a period of time (this period is configurable)Closing : the session is being closed (the remaining messages are being flushed, cleaning up is not terminated)

Idle for read : no read has actually been made for a period of time
Idle for write : no write has actually been made for a period of time
Idle for both : no read nor write for a period of time

Closed : The session is now closed, nothing else can be done to revive it.

对应的状态迁移图，如图所示：

通过上面的状态图，我们可以看出，是哪个事件的发生使得IoSession进入哪个状态，比较直观明了。下面，我们看一下IoSession对应的设计，类继承关系如下所示：

对于IoSession接口类，我在上图把具有不同类型功能的操作进行了分类，说明如下：

一个IoSession实例可以访问/持有哪些数据</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/319.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mina框架IoHandler与IoProcessor详解</title>
		<link>http://shiyanjun.cn/archives/310.html</link>
		<comments>http://shiyanjun.cn/archives/310.html#comments</comments>
		<pubDate>Mon, 02 Sep 2013 13:13:46 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=310</guid>
		<description><![CDATA[<p>我们已经知道，IoHandler是开发网络应用程序的时候，与实际业务逻辑相关的组件，即属于Mina核心框架之外的应用层组件。从Mina 官方文档上，我们几乎没有看到对IoProcessor的说明，实际上IoProcessor对实际使用Mina框架的开发人员透明，无需你去了解它的实现逻辑，它在Mina中用来处理实际的I/O操作。
我们分析的思路是，先分别对IoHandler与IoProcessor进行单独分析，然后再阐述它们之间的不同以及联系。

IoHandler

当我们通过IoSession执行相关操作的时候，如写数据，这些事件会触发Mina框架抽象的IoService实例，从而调用Mina框架底层的相关组件进行处理。这时，配置的IoHandler就被用来处理Mina所触发的相关事件，处理这些事件的操作被抽象出来。
实际上，IoHandler的继承层次非常简单，也说明了基于Mina框架开发实际网络应用程序，对业务逻辑的处理也还是相对比较容易的。看一下 IoHandler的继承层次，如图所示：

IoHandler接口所定义的操作，一共定义了7个处理事件的操作，如下所示：
因为IoHandler是一个接口，所以如果使用该接口我们就必须实现所有的方法，</p>]]></description>
	<p>我们已经知道，IoHandler是开发网络应用程序的时候，与实际业务逻辑相关的组件，即属于Mina核心框架之外的应用层组件。从Mina 官方文档上，我们几乎没有看到对IoProcessor的说明，实际上IoProcessor对实际使用Mina框架的开发人员透明，无需你去了解它的实现逻辑，它在Mina中用来处理实际的I/O操作。
我们分析的思路是，先分别对IoHandler与IoProcessor进行单独分析，然后再阐述它们之间的不同以及联系。

IoHandler

当我们通过IoSession执行相关操作的时候，如写数据，这些事件会触发Mina框架抽象的IoService实例，从而调用Mina框架底层的相关组件进行处理。这时，配置的IoHandler就被用来处理Mina所触发的相关事件，处理这些事件的操作被抽象出来。
实际上，IoHandler的继承层次非常简单，也说明了基于Mina框架开发实际网络应用程序，对业务逻辑的处理也还是相对比较容易的。看一下 IoHandler的继承层次，如图所示：

IoHandler接口所定义的操作，一共定义了7个处理事件的操作，如下所示：

public interface IoHandler {
	void sessionCreated(IoSession sessi</p>			<content:encoded><![CDATA[<p>我们已经知道，IoHandler是开发网络应用程序的时候，与实际业务逻辑相关的组件，即属于Mina核心框架之外的应用层组件。从Mina 官方文档上，我们几乎没有看到对IoProcessor的说明，实际上IoProcessor对实际使用Mina框架的开发人员透明，无需你去了解它的实现逻辑，它在Mina中用来处理实际的I/O操作。
我们分析的思路是，先分别对IoHandler与IoProcessor进行单独分析，然后再阐述它们之间的不同以及联系。

IoHandler

当我们通过IoSession执行相关操作的时候，如写数据，这些事件会触发Mina框架抽象的IoService实例，从而调用Mina框架底层的相关组件进行处理。这时，配置的IoHandler就被用来处理Mina所触发的相关事件，处理这些事件的操作被抽象出来。
实际上，IoHandler的继承层次非常简单，也说明了基于Mina框架开发实际网络应用程序，对业务逻辑的处理也还是相对比较容易的。看一下 IoHandler的继承层次，如图所示：

IoHandler接口所定义的操作，一共定义了7个处理事件的操作，如下所示：
因为IoHandler是一个接口，所以如果使用该接口我们就必须实现所有的方法，</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/310.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mina框架IoService通用抽象服务详解</title>
		<link>http://shiyanjun.cn/archives/259.html</link>
		<comments>http://shiyanjun.cn/archives/259.html#comments</comments>
		<pubDate>Fri, 30 Aug 2013 23:28:35 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=259</guid>
		<description><![CDATA[<p>IoService是对通信双方所进行的I/O操作的抽象，那么无论是在服务器端还是在客户端，都要进行I/O的读写操作，它们有一些共性，可以抽象出来。这里，我们主要详细说明IoAccectpr和IoConnector以及所基于的IoService抽象服务，都提供哪些操作和数据结构，都是如何构建的。首先，提供一个IoService服务接口相关的继承层次关系的类图，如图所示：

最终使用的Acceptor和Connector是上面继承层次中最下层的实现类。
IoService抽象
实际上，支持I/O操作服务的内容，集中在两个类中：IoService和AbstractIoService，看一下类图：

根据上图中IoService接口定义，我们给出接口中定义的方法，如下所示：
我们可以看到，IoService主要定义了两类服务，一类是提供I/O操作相关服务，另一类是会话 （IoSession）相关服务，这两类服务，无论是在服务端还是在客户端，都会提供，以此来保证双方通信。那么，具体地这两类服务中都包括哪些内容，我们总结如下：

管理IoService元数据，描述IoService本身，这些元数据都封装在TransportMetadata中，例如I/O 服务类型（如NIO，APR或RXTX）</p>]]></description>
	<p>IoService是对通信双方所进行的I/O操作的抽象，那么无论是在服务器端还是在客户端，都要进行I/O的读写操作，它们有一些共性，可以抽象出来。这里，我们主要详细说明IoAccectpr和IoConnector以及所基于的IoService抽象服务，都提供哪些操作和数据结构，都是如何构建的。首先，提供一个IoService服务接口相关的继承层次关系的类图，如图所示：

最终使用的Acceptor和Connector是上面继承层次中最下层的实现类。
IoService抽象
实际上，支持I/O操作服务的内容，集中在两个类中：IoService和AbstractIoService，看一下类图：

根据上图中IoService接口定义，我们给出接口中定义的方法，如下所示：

public interface IoService {
	void addListener(IoServiceListener listener);
	void removeListener(IoServiceListener listener);
	boolean isDisposing();
	boolean isDisposed();
	void dispose();
	void dispose(boolean awaitTermination);
	IoHandler getHandler();
	void setHandler(IoHandler handler);
	Map&lt;Long, IoSession&gt; getManagedSess</p>			<content:encoded><![CDATA[<p>IoService是对通信双方所进行的I/O操作的抽象，那么无论是在服务器端还是在客户端，都要进行I/O的读写操作，它们有一些共性，可以抽象出来。这里，我们主要详细说明IoAccectpr和IoConnector以及所基于的IoService抽象服务，都提供哪些操作和数据结构，都是如何构建的。首先，提供一个IoService服务接口相关的继承层次关系的类图，如图所示：

最终使用的Acceptor和Connector是上面继承层次中最下层的实现类。
IoService抽象
实际上，支持I/O操作服务的内容，集中在两个类中：IoService和AbstractIoService，看一下类图：

根据上图中IoService接口定义，我们给出接口中定义的方法，如下所示：
我们可以看到，IoService主要定义了两类服务，一类是提供I/O操作相关服务，另一类是会话 （IoSession）相关服务，这两类服务，无论是在服务端还是在客户端，都会提供，以此来保证双方通信。那么，具体地这两类服务中都包括哪些内容，我们总结如下：

管理IoService元数据，描述IoService本身，这些元数据都封装在TransportMetadata中，例如I/O 服务类型（如NIO，APR或RXTX）</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/259.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MIna框架I/O Filter Chain层设计</title>
		<link>http://shiyanjun.cn/archives/211.html</link>
		<comments>http://shiyanjun.cn/archives/211.html#comments</comments>
		<pubDate>Wed, 28 Aug 2013 12:04:29 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=211</guid>
		<description><![CDATA[<p>I/O Filter Chain层是介于I/O Service层与I/O Handler层之间的一层，从它的命名上可以看出，这个层可以根据实际应用的需要，设置一组IoFilter来对I/O Service层与I/O Handler层之间传输数据进行过滤，任何需要在这两层之间进行处理的逻辑都可以放到IoFilter中。
我们看一下IoFilter的抽象层次设计，如图所示：

通过上述类图可见，要实现一个自定义的IoFilter，一般是直接实现IoFilterAdapter类。同时，Mina也给出了几类常用的开发IoFilter的实现类，如下所示：

LoggingFilter记录所有事件和请求
ProtocolCodecFilter将到来的ByteBuffer转换成消息对象（POJO）
CompressionFilter压缩数据
SSLFilter增加SSL &#8211; TLS &#8211; StartTLS支持

想要实现一个自定义的IoFilter实现类，只需要基于上述给出的几个实现类即可。
如果想要实现自己的IoFilter，可以参考如下例子：
下面通过一个例子来说明，如何使用IoFilter的实现类。
ProtocolCodecFilter
下面是Mina自带的例子，使用了ProtocolCodecFilter类：
上面设置了两个IoFilter，关键是看如果基于文本行的消息，使</p>]]></description>
	<p>I/O Filter Chain层是介于I/O Service层与I/O Handler层之间的一层，从它的命名上可以看出，这个层可以根据实际应用的需要，设置一组IoFilter来对I/O Service层与I/O Handler层之间传输数据进行过滤，任何需要在这两层之间进行处理的逻辑都可以放到IoFilter中。
我们看一下IoFilter的抽象层次设计，如图所示：

通过上述类图可见，要实现一个自定义的IoFilter，一般是直接实现IoFilterAdapter类。同时，Mina也给出了几类常用的开发IoFilter的实现类，如下所示：

LoggingFilter记录所有事件和请求
ProtocolCodecFilter将到来的ByteBuffer转换成消息对象（POJO）
CompressionFilter压缩数据
SSLFilter增加SSL &#8211; TLS &#8211; StartTLS支持

想要实现一个自定义的IoFilter实现类，只需要基于上述给出的几个实现类即可。
如果想要实现自己的IoFilter，可以参考如下例子：

public class MyFilter extends IoFilterAdapter {
	@Override
	public void sessionOpened(NextFilter nextFilter, IoSession session) throws Exception {
		// Some logic here...
	</p>			<content:encoded><![CDATA[<p>I/O Filter Chain层是介于I/O Service层与I/O Handler层之间的一层，从它的命名上可以看出，这个层可以根据实际应用的需要，设置一组IoFilter来对I/O Service层与I/O Handler层之间传输数据进行过滤，任何需要在这两层之间进行处理的逻辑都可以放到IoFilter中。
我们看一下IoFilter的抽象层次设计，如图所示：

通过上述类图可见，要实现一个自定义的IoFilter，一般是直接实现IoFilterAdapter类。同时，Mina也给出了几类常用的开发IoFilter的实现类，如下所示：

LoggingFilter记录所有事件和请求
ProtocolCodecFilter将到来的ByteBuffer转换成消息对象（POJO）
CompressionFilter压缩数据
SSLFilter增加SSL &#8211; TLS &#8211; StartTLS支持

想要实现一个自定义的IoFilter实现类，只需要基于上述给出的几个实现类即可。
如果想要实现自己的IoFilter，可以参考如下例子：
下面通过一个例子来说明，如何使用IoFilter的实现类。
ProtocolCodecFilter
下面是Mina自带的例子，使用了ProtocolCodecFilter类：
上面设置了两个IoFilter，关键是看如果基于文本行的消息，使</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/211.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MIna框架I/O Service层设计</title>
		<link>http://shiyanjun.cn/archives/203.html</link>
		<comments>http://shiyanjun.cn/archives/203.html#comments</comments>
		<pubDate>Wed, 28 Aug 2013 11:46:31 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=203</guid>
		<description><![CDATA[<p>Mina从2.0版本以后，它的设计让人感觉到非常的优雅。它对网络应用通信框架的3个层进行了更好的抽象，以及在功能逻辑上的划分，同时又保证了 作为一个网络应用通信框架的统一。划分的3个层分别为：

I/O Service层
I/O Filter Chain层
I/O Handler层

这里，我们重点关注I/O Service层。作为一个基于网络通信的应用，无论是服务器还是客户端角色，都要和网络I/O打交道，比如，服务器端需要创建服务器端Socket，监听指定端口并等待请求的带来，而客户端需要连接到服务器端指定的监听端口，使用网络服务。一般来说，这些I/O操作都比较复杂，而且很难在编 码中进行很好地控制，Mina的I/O Service层就是处理这些与实际的网络I/O相关的操作（事件）。
我们先看一下，对于服务器端和客户端，I/O Service层是如何设计的。类设计上的关系，作为这一层的最顶层抽象就是IoService接口类，如图所示：

通过上图，我们可以看到，IoService抽象的服务（功能）有如下几个：

管理IoSession：创建和删除IoSession，探测会话Idle状态
Filter Chain管理：处理过滤器链，允许用户修改过</p>]]></description>
	<p>Mina从2.0版本以后，它的设计让人感觉到非常的优雅。它对网络应用通信框架的3个层进行了更好的抽象，以及在功能逻辑上的划分，同时又保证了 作为一个网络应用通信框架的统一。划分的3个层分别为：

I/O Service层
I/O Filter Chain层
I/O Handler层

这里，我们重点关注I/O Service层。作为一个基于网络通信的应用，无论是服务器还是客户端角色，都要和网络I/O打交道，比如，服务器端需要创建服务器端Socket，监听指定端口并等待请求的带来，而客户端需要连接到服务器端指定的监听端口，使用网络服务。一般来说，这些I/O操作都比较复杂，而且很难在编 码中进行很好地控制，Mina的I/O Service层就是处理这些与实际的网络I/O相关的操作（事件）。
我们先看一下，对于服务器端和客户端，I/O Service层是如何设计的。类设计上的关系，作为这一层的最顶层抽象就是IoService接口类，如图所示：

通过上图，我们可以看到，IoService抽象的服务（功能）有如下几个：

管理IoSession：创建和删除IoSession，探测会话Idle状态
Filter Chain管理：处理过滤器链，允许用户修改过</p>			<content:encoded><![CDATA[<p>Mina从2.0版本以后，它的设计让人感觉到非常的优雅。它对网络应用通信框架的3个层进行了更好的抽象，以及在功能逻辑上的划分，同时又保证了 作为一个网络应用通信框架的统一。划分的3个层分别为：

I/O Service层
I/O Filter Chain层
I/O Handler层

这里，我们重点关注I/O Service层。作为一个基于网络通信的应用，无论是服务器还是客户端角色，都要和网络I/O打交道，比如，服务器端需要创建服务器端Socket，监听指定端口并等待请求的带来，而客户端需要连接到服务器端指定的监听端口，使用网络服务。一般来说，这些I/O操作都比较复杂，而且很难在编 码中进行很好地控制，Mina的I/O Service层就是处理这些与实际的网络I/O相关的操作（事件）。
我们先看一下，对于服务器端和客户端，I/O Service层是如何设计的。类设计上的关系，作为这一层的最顶层抽象就是IoService接口类，如图所示：

通过上图，我们可以看到，IoService抽象的服务（功能）有如下几个：

管理IoSession：创建和删除IoSession，探测会话Idle状态
Filter Chain管理：处理过滤器链，允许用户修改过</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/203.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Mina通信框架架构与应用</title>
		<link>http://shiyanjun.cn/archives/188.html</link>
		<comments>http://shiyanjun.cn/archives/188.html#comments</comments>
		<pubDate>Tue, 27 Aug 2013 12:41:44 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Mina]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=188</guid>
		<description><![CDATA[<p>Apache Mina Server 是一个网络通信应用框架，也就是说，它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架（当然，也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等），Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用，Mina 提供了事件驱动、异步（Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持）操作的编程模型。
从官网文档“MINA based Application Architecture”中可以看到Mina作为一个通信层框架，在实际应用所处的位置，如图所示：

Mina位于用户应用程序和底层Java网络API（和in-VM通信）之间，我们开发基于Mina的网络应用程序，就无需关心复杂的通信细节。
应用整体架构
再看一下，Mina提供的基本组件，如图所示：

也就是说，无论是客户端还是服务端，使用Mina框架实现通信的逻辑分层在概念上统一的，即包含如下三层：

I/O Service &#8211; Performs actual I/O
I/O Filter Chain &#8211; Filters/Transforms bytes into desired Data Structures and vice-versa
I/O Handler &#8211; Here resides the actual business logic

</p>]]></description>
	<p>Apache Mina Server 是一个网络通信应用框架，也就是说，它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架（当然，也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等），Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用，Mina 提供了事件驱动、异步（Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持）操作的编程模型。
从官网文档“MINA based Application Architecture”中可以看到Mina作为一个通信层框架，在实际应用所处的位置，如图所示：

Mina位于用户应用程序和底层Java网络API（和in-VM通信）之间，我们开发基于Mina的网络应用程序，就无需关心复杂的通信细节。
应用整体架构
再看一下，Mina提供的基本组件，如图所示：

也就是说，无论是客户端还是服务端，使用Mina框架实现通信的逻辑分层在概念上统一的，即包含如下三层：

I/O Service &#8211; Performs actual I/O
I/O Filter Chain &#8211; Filters/Transforms bytes into desired Data Structures and vice-versa
I/O Handler &#8211; Here resides the actual business logic

</p>			<content:encoded><![CDATA[<p>Apache Mina Server 是一个网络通信应用框架，也就是说，它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架（当然，也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等），Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用，Mina 提供了事件驱动、异步（Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持）操作的编程模型。
从官网文档“MINA based Application Architecture”中可以看到Mina作为一个通信层框架，在实际应用所处的位置，如图所示：

Mina位于用户应用程序和底层Java网络API（和in-VM通信）之间，我们开发基于Mina的网络应用程序，就无需关心复杂的通信细节。
应用整体架构
再看一下，Mina提供的基本组件，如图所示：

也就是说，无论是客户端还是服务端，使用Mina框架实现通信的逻辑分层在概念上统一的，即包含如下三层：

I/O Service &#8211; Performs actual I/O
I/O Filter Chain &#8211; Filters/Transforms bytes into desired Data Structures and vice-versa
I/O Handler &#8211; Here resides the actual business logic

</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/188.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
