- 浏览: 981294 次
文章分类
- 全部博客 (428)
- Hadoop (2)
- HBase (1)
- ELK (1)
- ActiveMQ (13)
- Kafka (5)
- Redis (14)
- Dubbo (1)
- Memcached (5)
- Netty (56)
- Mina (34)
- NIO (51)
- JUC (53)
- Spring (13)
- Mybatis (17)
- MySQL (21)
- JDBC (12)
- C3P0 (5)
- Tomcat (13)
- SLF4J-log4j (9)
- P6Spy (4)
- Quartz (12)
- Zabbix (7)
- JAVA (9)
- Linux (15)
- HTML (9)
- Lucene (0)
- JS (2)
- WebService (1)
- Maven (4)
- Oracle&MSSQL (14)
- iText (11)
- Development Tools (8)
- UTILS (4)
- LIFE (8)
最新评论
-
Donald_Draper:
Donald_Draper 写道刘落落cici 写道能给我发一 ...
DatagramChannelImpl 解析三(多播) -
Donald_Draper:
刘落落cici 写道能给我发一份这个类的源码吗Datagram ...
DatagramChannelImpl 解析三(多播) -
lyfyouyun:
请问楼主,执行消息发送的时候,报错:Transport sch ...
ActiveMQ连接工厂、连接详解 -
ezlhq:
关于 PollArrayWrapper 状态含义猜测:参考 S ...
WindowsSelectorImpl解析一(FdMap,PollArrayWrapper) -
flyfeifei66:
打算使用xmemcache作为memcache的客户端,由于x ...
Memcached分布式客户端(Xmemcached)
Mina 协议编解码过滤器一(协议编解码工厂、协议编码器):
http://donald-draper.iteye.com/blog/2376663
引言:
上一篇文章,我们看了协议编解码过滤器,其中涉及到协议编解码工厂、协议编码器、和协议解码器,
由于篇幅原因,我们只看了协议编解码工厂、协议编码器,先来回顾一下:
协议编解码过滤器ProtocolCodecFilter关联一个协议编解码工厂ProtocolCodecFactory,协议编解码工厂提供协议编码器ProtocolEncoder和解码器ProtocolDecoder;编码器将消息对象编码成二进制或协议数据,解码器将二进制或协议数据解码成消息对象。编码器ProtocolEncoder主要有两个方法,encode和dispose;encode用于,编码上层的消息对象为二进制或协议数据。mina调用编码器的#encode方法将从会话写请求队列中pop的消息,然后调用ProtocolEncoderOutput#write方法将编码后的消息放在ByteBuffer;dispose方法释放编码器资源。ProtocolEncoderAdapter为编码器抽象实现,默认实现了dispose,不做任何事情,对于不需要释放资源的编码器继承ProtocolEncoderAdapter。ProtocolEncoderOutput主要的工作是将协议编码器编码后的
字节buffer,缓存起来,等待flush方法调用时,则将数据发送出去。SimpleProtocolEncoderOutput为ProtocolEncoderOutput的简单实现内部有一个buffer队列bufferQueue(Queue),用于存放write(ByteBuffer)方法,传入的字节buffer;
mergeAll方法为合并buffer队列的所有buffer数据到一个buffer;flush方法为发送buffer队列中的所有buffer,实际发送工作委托给doFlush方法待子类实现。ProtocolEncoderOutputImpl为协议编解码过滤器的内部类,ProtocolEncoderOutputImpl的doFlush,首先将会话包装成DefaultWriteFuture,将会话,写请求信息传递给NextFilter。
今天这篇文章我们来看一下协议解码器:
先贴出协议编解码过滤器及协议编解码工厂ProtocolCodecFactory的代码,以便理解
//ProtocolCodecFilter
//ProtocolCodecFactory
从上可以看出,协议编解码工厂ProtocolCodecFactory提供协议编码器ProtocolEncoder和解码器ProtocolDecoder;
编码器将消息对象编码成二进制或协议数据,解码器将二进制或协议数据解码成消息对象。
上一篇文章我们看了协议编码器,今天来看一下协议解码器:
从上面来看解码器主要是将二级制或协议内存解码成上层消息对象。mina在读取数据时,调用解码器的#decode,将解码后的消息放到ProtocolDecoderOutput;当会话关闭时,调用finishDecode解码那些在#decode方法中没有处理完的数据。dispose主要是 释放所有与解码器有关的资源。
再来看协议解码器的抽象实现ProtocolDecoderAdapter
ProtocolDecoderAdapter协议解码适配器主要是针对那些不需要#finishDecode和#dispose的解码器;
mina对于大部分的组件,都实现的相应的适配,使我们可以根据需要,去实现需要关注的方法或事件,
忽略不关心的方法或事件。比如我们前面看的IoFilter->IoFilterAdapter。
再来看编码输出ProtocolDecoderOutput,
ProtocolDecoderOutput主要有两个方法,一个write方法,用于解码器,解完消息后回调;
一个flush方法,用于刷新所有解码器写到协议解码输出的消息对象。
再来看ProtocolDecoderOutput的简单实现SimpleProtocolDecoderOutput
从上面来看,简单协议解码输出SimpleProtocolDecoderOutput,关联一个会话session,一个后继过滤器nextFilter,及一个消息队列messageQueue;所有解码器解码后的消息,回调协议解码输出的write方法,将消息暂时放在消息队列messageQueue中;flush方法主要是将消息队列中的消息传给后继过滤器的messageReceived方法。
再来看一些编解码过滤器获取协议解码输出的方法:
//ProtocolCodecFilter
//获取协议解码输出
//获取协议编码输出
从上面来看协议编解码过滤器ProtocolCodecFilter默认的协议编码输出为ProtocolEncoderOutputImpl,协议解码输出为SimpleProtocolDecoderOutput。
至此我们将协议编解码过滤器的所涉及到的相关概念看完,来整理一下:
协议编解码过滤器关联一个协议编解码工厂,协议编解码工厂用于创建协议编码和解码器;协议编码器将上层消息,编码成二级制或特定协议格式的数据,写到协议编码器输出的字节队列中,flush字节队列中的数据(filterWrite)给下一个过滤器。协议解码器将接收到的二级制或特定协议格式的数据,解码成上层消息,存放到协议解码器输出的消息队列,flush将消息队列中的消息传给后继过滤器的messageReceived方法。协议编解码过滤器ProtocolCodecFilter默认的协议编码输出为ProtocolEncoderOutputImpl,
协议解码输出为SimpleProtocolDecoderOutput。
结构如下:
总结:
解码器ProtocolDecoder将二级制或协议内存解码成上层消息对象。mina在读取数据时,调用解码器的#decode,将解码后的消息放到ProtocolDecoderOutput;当会话关闭时,调用finishDecode解码那些在#decode方法中没有处理完的数据。dispose主要是 释放所有与解码器有关的资源。针对不需要#finishDecode和#dispose的解码器,我们可以继承协议解码适配器ProtocolDecoderAdapter。ProtocolDecoderOutput有两个方法,一个write方法,用于解码器,解完消息后回调;一个flush方法,用于刷新所有解码器写到协议解码输出的消息对象。简单协议解码输出SimpleProtocolDecoderOutput,关联一个会话session,一个后继过滤器nextFilter,及一个消息队列messageQueue;所有解码器解码后的消息,回调协议解码输出的write方法,将消息暂时放在消息队列messageQueue中;flush方法主要是将消息队列中的消息传给后继过滤器的messageReceived方法。
http://donald-draper.iteye.com/blog/2376663
引言:
上一篇文章,我们看了协议编解码过滤器,其中涉及到协议编解码工厂、协议编码器、和协议解码器,
由于篇幅原因,我们只看了协议编解码工厂、协议编码器,先来回顾一下:
协议编解码过滤器ProtocolCodecFilter关联一个协议编解码工厂ProtocolCodecFactory,协议编解码工厂提供协议编码器ProtocolEncoder和解码器ProtocolDecoder;编码器将消息对象编码成二进制或协议数据,解码器将二进制或协议数据解码成消息对象。编码器ProtocolEncoder主要有两个方法,encode和dispose;encode用于,编码上层的消息对象为二进制或协议数据。mina调用编码器的#encode方法将从会话写请求队列中pop的消息,然后调用ProtocolEncoderOutput#write方法将编码后的消息放在ByteBuffer;dispose方法释放编码器资源。ProtocolEncoderAdapter为编码器抽象实现,默认实现了dispose,不做任何事情,对于不需要释放资源的编码器继承ProtocolEncoderAdapter。ProtocolEncoderOutput主要的工作是将协议编码器编码后的
字节buffer,缓存起来,等待flush方法调用时,则将数据发送出去。SimpleProtocolEncoderOutput为ProtocolEncoderOutput的简单实现内部有一个buffer队列bufferQueue(Queue),用于存放write(ByteBuffer)方法,传入的字节buffer;
mergeAll方法为合并buffer队列的所有buffer数据到一个buffer;flush方法为发送buffer队列中的所有buffer,实际发送工作委托给doFlush方法待子类实现。ProtocolEncoderOutputImpl为协议编解码过滤器的内部类,ProtocolEncoderOutputImpl的doFlush,首先将会话包装成DefaultWriteFuture,将会话,写请求信息传递给NextFilter。
今天这篇文章我们来看一下协议解码器:
先贴出协议编解码过滤器及协议编解码工厂ProtocolCodecFactory的代码,以便理解
//ProtocolCodecFilter
/** * An {@link IoFilter} which translates binary or protocol specific data into * message object and vice versa using {@link ProtocolCodecFactory}, * {@link ProtocolEncoder}, or {@link ProtocolDecoder}. * * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */ public class ProtocolCodecFilter extends IoFilterAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(org/apache/mina/filter/codec/ProtocolCodecFilter); private static final Class EMPTY_PARAMS[] = new Class[0]; private static final IoBuffer EMPTY_BUFFER = IoBuffer.wrap(new byte[0]); //编码器属性key private static final AttributeKey ENCODER = new AttributeKey(org/apache/mina/filter/codec/ProtocolCodecFilter, "encoder"); //编码器输出属性key private static final AttributeKey ENCODER_OUT = new AttributeKey(org/apache/mina/filter/codec/ProtocolCodecFilter, "encoderOut"); //解码器属性key private static final AttributeKey DECODER = new AttributeKey(org/apache/mina/filter/codec/ProtocolCodecFilter, "decoder"); //解码器输出属性key private static final AttributeKey DECODER_OUT = new AttributeKey(org/apache/mina/filter/codec/ProtocolCodecFilter, "decoderOut"); private final ProtocolCodecFactory factory;//协议编解码器工厂 }
//ProtocolCodecFactory
/** * Provides {@link ProtocolEncoder} and {@link ProtocolDecoder} which translates * binary or protocol specific data into message object and vice versa. * <p>协议编解码工厂ProtocolCodecFactory提供协议编码器和解码器,解码器二进制数据或 协议数据到消息对象;编码器反之。 * Please refer to * [url=../../../../../xref-examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.html]<code>ReverserProtocolProvider</code>[/url] * example. * * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */ public interface ProtocolCodecFactory { /** * Returns a new (or reusable) instance of {@link ProtocolEncoder} which * encodes message objects into binary or protocol-specific data. 返回一个编码器实例,用于将消息对象编码成二进制或协议数据 */ ProtocolEncoder getEncoder() throws Exception; /** * Returns a new (or reusable) instance of {@link ProtocolDecoder} which * decodes binary or protocol-specific data into message objects. 返回一个解码器实例,用于将二进制或协议数据解码成消息对象 */ ProtocolDecoder getDecoder() throws Exception; }
从上可以看出,协议编解码工厂ProtocolCodecFactory提供协议编码器ProtocolEncoder和解码器ProtocolDecoder;
编码器将消息对象编码成二进制或协议数据,解码器将二进制或协议数据解码成消息对象。
上一篇文章我们看了协议编码器,今天来看一下协议解码器:
/** * Decodes binary or protocol-specific data into higher-level message objects. * MINA invokes {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)} * method with read data, and then the decoder implementation puts decoded * messages into {@link ProtocolDecoderOutput} by calling * {@link ProtocolDecoderOutput#write(Object)}. * <p> * Please refer to * [url=../../../../../xref-examples/org/apache/mina/examples/reverser/TextLineDecoder.html]<code>TextLineDecoder</code>[/url] * example. * * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */ public interface ProtocolDecoder { /** * Decodes binary or protocol-specific content into higher-level message objects. * MINA invokes {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)} * method with read data, and then the decoder implementation puts decoded * messages into {@link ProtocolDecoderOutput}. * 将二级制或协议内存解码成上层消息对象。mina在读取数据时,调用解码器的#decode, 将解码后的消息放到ProtocolDecoderOutput * @throws Exception if the read data violated protocol specification */ void decode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception; /** * Invoked when the specified <tt>session</tt> is closed. This method is useful * when you deal with the protocol which doesn't specify the length of a message * such as HTTP response without <tt>content-length</tt> header. Implement this * method to process the remaining data that {@link #decode(IoSession, ByteBuffer, ProtocolDecoderOutput)} * method didn't process completely. * 到session关闭时,调用此方法。当处理没有精确长度协议时,特别有用,不如Http没有内容长度的回应。 实现此方法,主要是对于 * @throws Exception if the read data violated protocol specification */ void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception; /** * Releases all resources related with this decoder. * 释放所有与解码器有关的资源。 * @throws Exception if failed to dispose all resources */ void dispose(IoSession session) throws Exception; }
从上面来看解码器主要是将二级制或协议内存解码成上层消息对象。mina在读取数据时,调用解码器的#decode,将解码后的消息放到ProtocolDecoderOutput;当会话关闭时,调用finishDecode解码那些在#decode方法中没有处理完的数据。dispose主要是 释放所有与解码器有关的资源。
再来看协议解码器的抽象实现ProtocolDecoderAdapter
/** * An abstract {@link ProtocolDecoder} implementation for those who don't need * {@link ProtocolDecoder#finishDecode(IoSession, ProtocolDecoderOutput)} nor * {@link ProtocolDecoder#dispose(IoSession)} method. * 协议解码适配器主要是针对那些不需要#finishDecode和#dispose的解码器 * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */ public abstract class ProtocolDecoderAdapter implements ProtocolDecoder { /** * Override this method to deal with the closed connection. * The default implementation does nothing.会话关闭 */ public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception { } /** * Override this method to dispose all resources related with this decoder. * The default implementation does nothing.释放资源 */ public void dispose(IoSession session) throws Exception { } }
ProtocolDecoderAdapter协议解码适配器主要是针对那些不需要#finishDecode和#dispose的解码器;
mina对于大部分的组件,都实现的相应的适配,使我们可以根据需要,去实现需要关注的方法或事件,
忽略不关心的方法或事件。比如我们前面看的IoFilter->IoFilterAdapter。
再来看编码输出ProtocolDecoderOutput,
/** * Callback for {@link ProtocolDecoder} to generate decoded messages. * {@link ProtocolDecoder} must call {@link #write(Object)} for each decoded * messages. * * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */ public interface ProtocolDecoderOutput { /** * Callback for {@link ProtocolDecoder} to generate decoded messages. * {@link ProtocolDecoder} must call {@link #write(Object)} for each * decoded messages. * 用于解码器,解码消息后,回调write方法。 * @param message the decoded message */ void write(Object message); /** * Flushes all messages you wrote via {@link #write(Object)} to * the next filter.刷新所有write方法写的消息 */ void flush(); }
ProtocolDecoderOutput主要有两个方法,一个write方法,用于解码器,解完消息后回调;
一个flush方法,用于刷新所有解码器写到协议解码输出的消息对象。
再来看ProtocolDecoderOutput的简单实现SimpleProtocolDecoderOutput
/** * A {@link ProtocolDecoderOutput} based on queue. * * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ * */ public class SimpleProtocolDecoderOutput implements ProtocolDecoderOutput { private final NextFilter nextFilter;//后继过滤器 private final IoSession session;//关联会话 private final Queue messageQueue = new Queue();//消息队列 //根据会话和后继过滤器构建简单协议解码输出 public SimpleProtocolDecoderOutput(IoSession session, NextFilter nextFilter) { this.nextFilter = nextFilter; this.session = session; } //写消息,直接将消息push到消息队列 public void write(Object message) { messageQueue.push(message); if (session instanceof BaseIoSession) { ((BaseIoSession) session).increaseReadMessages(); } } //将消息队列中的消息传给后继过滤器的messageReceived方法。 public void flush() { while (!messageQueue.isEmpty()) { nextFilter.messageReceived(session, messageQueue.pop()); } } }
从上面来看,简单协议解码输出SimpleProtocolDecoderOutput,关联一个会话session,一个后继过滤器nextFilter,及一个消息队列messageQueue;所有解码器解码后的消息,回调协议解码输出的write方法,将消息暂时放在消息队列messageQueue中;flush方法主要是将消息队列中的消息传给后继过滤器的messageReceived方法。
再来看一些编解码过滤器获取协议解码输出的方法:
//ProtocolCodecFilter
//获取协议解码输出
private ProtocolDecoderOutput getDecoderOut(IoSession session, NextFilter nextFilter) { //从当前会话获取解码输出属性DECODER_OUT对一个的ProtocolDecoderOutput ProtocolDecoderOutput out = (ProtocolDecoderOutput) session.getAttribute(DECODER_OUT); if (out == null) { //为null,则创建一个SimpleProtocolDecoderOutput,添加到会话中 out = new SimpleProtocolDecoderOutput(session, nextFilter); session.setAttribute(DECODER_OUT, out); } return out; }
//获取协议编码输出
private ProtocolEncoderOutputImpl getEncoderOut(IoSession session, NextFilter nextFilter, WriteRequest writeRequest) { //这个就是我们上一篇文章讲的 return new ProtocolEncoderOutputImpl(session, nextFilter, writeRequest); }
从上面来看协议编解码过滤器ProtocolCodecFilter默认的协议编码输出为ProtocolEncoderOutputImpl,协议解码输出为SimpleProtocolDecoderOutput。
至此我们将协议编解码过滤器的所涉及到的相关概念看完,来整理一下:
协议编解码过滤器关联一个协议编解码工厂,协议编解码工厂用于创建协议编码和解码器;协议编码器将上层消息,编码成二级制或特定协议格式的数据,写到协议编码器输出的字节队列中,flush字节队列中的数据(filterWrite)给下一个过滤器。协议解码器将接收到的二级制或特定协议格式的数据,解码成上层消息,存放到协议解码器输出的消息队列,flush将消息队列中的消息传给后继过滤器的messageReceived方法。协议编解码过滤器ProtocolCodecFilter默认的协议编码输出为ProtocolEncoderOutputImpl,
协议解码输出为SimpleProtocolDecoderOutput。
结构如下:
ProtocolCodecFilter extends IoFilterAdapter --ProtocolCodecFactory --ProtocolEncoder --ProtocolEncoderOutput(ProtocolEncoderOutputImpl) --ProtocolDecoder --ProtocolDecoderOutput(SimpleProtocolDecoderOutput)
总结:
解码器ProtocolDecoder将二级制或协议内存解码成上层消息对象。mina在读取数据时,调用解码器的#decode,将解码后的消息放到ProtocolDecoderOutput;当会话关闭时,调用finishDecode解码那些在#decode方法中没有处理完的数据。dispose主要是 释放所有与解码器有关的资源。针对不需要#finishDecode和#dispose的解码器,我们可以继承协议解码适配器ProtocolDecoderAdapter。ProtocolDecoderOutput有两个方法,一个write方法,用于解码器,解完消息后回调;一个flush方法,用于刷新所有解码器写到协议解码输出的消息对象。简单协议解码输出SimpleProtocolDecoderOutput,关联一个会话session,一个后继过滤器nextFilter,及一个消息队列messageQueue;所有解码器解码后的消息,回调协议解码输出的write方法,将消息暂时放在消息队列messageQueue中;flush方法主要是将消息队列中的消息传给后继过滤器的messageReceived方法。
发表评论
-
Mina 报文连接器(NioDatagramConnector)
2017-06-14 08:46 1420Mina 抽象Polling连接器(A ... -
Mina 报文监听器NioDatagramAcceptor二(发送会话消息等)
2017-06-13 16:01 1544Mina 报文监听器NioDatagramAcceptor一( ... -
Mina 报文监听器NioDatagramAcceptor一(初始化,Io处理器)
2017-06-13 09:51 2578Mina Io监听器接口定义及抽象实现:http://dona ... -
Mina 报文通信简单示例
2017-06-12 09:01 2586MINA TCP简单通信实例:http://donald-dr ... -
Mina socket连接器(NioSocketConnector)
2017-06-12 08:37 4776Mina 抽象Polling连接器(AbstractPolli ... -
Mina 抽象Polling连接器(AbstractPollingIoConnector)
2017-06-11 21:29 1010Mina 连接器接口定义及抽象实现(IoConnector ) ... -
Mina 连接器接口定义及抽象实现(IoConnector )
2017-06-11 13:46 1835Mina IoService接口定义及抽象实现:http:// ... -
Mina socket监听器(NioSocketAcceptor)
2017-06-09 08:44 3424Mina IoService接口定义及抽象实现:http:// ... -
Mina 抽象polling监听器
2017-06-08 22:32 786Mina Io监听器接口定义及抽象实现:http://dona ... -
Mina Io监听器接口定义及抽象实现
2017-06-07 13:02 1352Mina IoService接口定义及抽象实现:http:// ... -
Mina IoService接口定义及抽象实现
2017-06-06 23:44 1200Mina IoHandler接口定义:http://donal ... -
Mina Nio会话(Socket,DataGram)
2017-06-06 12:53 1210Mina Socket会话配置:http://donald-d ... -
Mina 抽象Io会话
2017-06-05 22:45 1017Mina Io会话接口定义:http://donald-dra ... -
Mina Io会话接口定义
2017-06-04 23:15 1170Mina Nio处理器:http://donald-drape ... -
Mina Nio处理器
2017-06-04 22:19 745Mina Io处理器抽象实现:http://donald-dr ... -
Mina Io处理器抽象实现
2017-06-03 23:52 1151Mina 过滤链抽象实现:http://donald-drap ... -
Mina IoHandler接口定义
2017-06-01 21:30 1736Mina 过滤链抽象实现:http://donald-drap ... -
MINA 多路复用协议编解码器工厂二(多路复用协议解码器)
2017-06-01 12:52 2279MINA 多路复用协议编解码器工厂一(多路复用协议编码器): ... -
MINA 多路复用协议编解码器工厂一(多路复用协议编码器)
2017-05-31 22:22 1873MINA 多路分离解码器实例:http://donald-dr ... -
Mina 累计协议解码器
2017-05-31 00:09 1234MINA 编解码器实例:http://donald-drape ...
相关推荐
MINA(Java Multicast Network Application Framework)是Apache软件基金会开发的一个网络应用...同时,结合提供的博客链接(虽然在这里没有具体内容),你还可以找到更多关于MINA协议解码过滤器使用的示例和实践技巧。
在Java的网络编程中,...理解Mina的过滤器机制和编码解码器接口,能够帮助开发者高效地处理网络通信中的数据转换,从而实现复杂的应用场景。通过不断地实践和优化,你可以构建出符合业务需求的高效、可靠的网络服务。
2. 在解码过滤器中,数据被分割成多个“消息”单元,每个消息对应一个连接。 3. 消息被传递给相应的解码器进行解码,解码器根据协议解析出有意义的信息。 4. 解码后的对象被传递到下一个过滤器,直至到达业务处理...
自定义编解码器可以实现特定的数据压缩、加密或者特定协议的解析,如XML、JSON或者其他二进制协议。这句话还强调了开源精神,表示技术应当被分享和共同进步,这也是MINA作为开源项目的一大优点。 在标签中,"mina...
- **添加编码器和解码器**:通过`FilterChainBuilder`创建过滤器链,添加自定义的编码器和解码器,确保数据在发送和接收时正确处理。 3. **创建Mina客户端** - **配置Connector**:使用`TcpClient`或`...
在给出的代码中,`MyProtocolFactory` 实现了 `ProtocolCodecFactory` 接口,这个工厂类的作用是为MINA的过滤器链提供解码器和编码器。 `MyProtocolDecoder` 类继承自 `ProtocolDecoderAdapter`,其主要任务是将...
1. **Filter机制**:MINA的过滤器机制类似于Servlet中的Filter,它允许我们对进出的数据进行拦截、修改或转发。通过自定义过滤器,我们可以实现HTTP协议的解析、编码等功能。 2. **Handler处理**:MINA的处理器是...
Mina2.0 框架源码剖析(二)主要包括了解 Mina2.0 的过滤器机制、编解码器的使用、异常处理机制等。 知识点: * 过滤器机制:LoggingFilter、ProtocolCodecFilter * 编解码器的使用:TextLineCodecFactory * 异常...
其核心组件包括Session(会话)、Filter(过滤器)和ProtocolCodec(协议编解码器)。Session代表客户端和服务端之间的连接,Filter用于处理数据传输前后的逻辑,ProtocolCodec则负责将应用层的数据转换为网络传输...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步....Demo3:自定义协议编解码 31 3.IoHandler接口 50 三. Mina实例 50 四. 其他 50
MINA的编码器和解编码器遵循了Filter设计模式,每个解编码器都是一个过滤器,可以在数据传递过程中进行拦截和处理。 3. **自定义解编码器的实现** 自定义解编码器需要继承MINA提供的AbstractDecoder类或其子类,并...
mina学习资料 引言 1 一. Mina入门 2 第一步....第二步....第三步....第四步....第五步....二. Mina基础 9 ...添加过滤器 16 自定义编解码器 17 ...Demo3:自定义协议编解码 31 3.IoHandler接口 50 三. Mina实例 50 四. 其他 50
- **编解码器**:介绍如何使用Mina提供的编解码器过滤器对网络数据进行编码和解码。 #### Chapter 10 - Executor过滤器 - **执行器**:探讨了Mina中的Executor过滤器,用于管理和调度线程,确保程序高效运行。 ##...
在Mina中,解决这个问题的关键在于定义正确的协议编码器和解码器。例如,你可以使用FixedLengthFrameDecoder或LineBasedFrameDecoder来确保每个接收到的数据块都能正确地组合成原始消息。 2. **粘包**: 相反,...
3. **丰富的API**:Mina提供了一套完整的API,包括Filter Chain(过滤器链)、Session(会话)和Protocol Codec(协议编解码器)等概念,使得开发者可以轻松地构建网络应用。 4. **过滤器机制**:Mina的过滤器链...
6. **Protocol Buffers**:MINA提供了协议编解码机制,允许开发者自定义协议格式。这使得MINA能灵活地支持各种网络协议,如HTTP、FTP、SMTP等。 在`apache-mina-2.0.16`这个版本中,我们可以看到以下主要内容: - ...
1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...
Mina通过其内置的协议编解码器,为这些操作提供了高度封装,大大提高了代码的复用性和维护性。 #### 总结 Mina框架以其卓越的性能和灵活的架构,成为了开发高性能网络应用程序的理想选择。它不仅简化了底层I/O和...
在实际开发中,使用Mina可以大大简化网络编程的工作,比如创建一个MinaTest项目,我们可以定义一个简单的TCP服务,使用Mina的Acceptor监听指定端口,然后创建一个解码过滤器处理客户端发送的数据。同时,客户端也...