提醒1:
由apache mina建立的socket不管是采用TCP或是UDP,在Filter不添加codec选项的情况下,由IoHandlerAdapter派生的处理handler 类中public void messageReceived(IoSession session, Object message){}函数里的message对象是IoBuffer的实例,如下:
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
if (! (message instanceof IoBuffer)) {
return;
}
IoBuffer rb = (IoBuffer) message;
callback.messageReceived(java.nio.ByteBuffer.wrap(rb.array(), 0, rb.buf().limit()));
}
如果你使用mina建立一个socket添加了如下:
IoFilter CODEC_FILTER = new ProtocolCodecFilter(
new TextLineCodecFactory());
connector(acceptor).getFilterChain().addLast("codec", CODEC_FILTER);
如果发送数据的socket不是同样的设置或者不是利用mina建立的socket则发送数据的时候需要在数据末尾添加‘\n’,以表示字符串结束。
提醒2:
由于我们使用mina socket读取数据时通常都是采用其通知接收的方式,所以我们必须留心接收数据的完整性,如果你使用mina socket接收数据不完整,在确认自己接收处理代码无误后,请检查一下org\apache\mina\core\polling \AbstractPollingIoProcessor.java中的代码的如下红色部分:
private void read(T session) {
IoSessionConfig config = session.getConfig();
IoBuffer buf = IoBuffer.allocate(config.getReadBufferSize());
final boolean hasFragmentation =
session.getTransportMetadata().hasFragmentation();
try {
int readBytes = 0;
int ret;
try {
if (hasFragmentation) {
while ((ret = read(session, buf)) > 0) {
readBytes += ret;
if (!buf.hasRemaining()) {
break;
}
}
} else {
ret = read(session, buf);
if (ret > 0) {
readBytes = ret;
}
}
} finally {
buf.flip();
}
if (readBytes > 0) {
IoFilterChain filterChain = session.getFilterChain();
filterChain.fireMessageReceived(buf);
buf = null;
if (hasFragmentation) {
if (readBytes << 1 < config.getReadBufferSize()) {
session.decreaseReadBufferSize();
} else if (readBytes == config.getReadBufferSize()) {
session.increaseReadBufferSize();
}
}
}
if (ret < 0) {
scheduleRemove(session);
}
} catch (Throwable e) {
if (e instanceof IOException) {
scheduleRemove(session);
}
IoFilterChain filterChain = session.getFilterChain();
filterChain.fireExceptionCaught(e);
}
}
转载于:https://my.oschina.net/u/2332347/blog/637852
分享到:
相关推荐
这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语背景的开发者理解和实践。 Apache Mina的核心理念是提供一个与传输协议无关...
压缩包中的"mina"文件很可能包含了MINA的示例代码,这些代码可以帮助初学者快速理解如何使用MINA框架。通过这些实例,你可以学习到如何配置Acceptor、创建Filter链、编写Handler以及如何处理各种网络事件。这些实例...
8. **实战经验**:博主royal2xiaose的博客文章可能分享了如何使用Mina创建一个基础的网络服务,包括项目的初始化、编写过滤器、处理数据等步骤,为初学者提供了一个很好的学习起点。 通过深入学习和实践这个Apache ...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步...无论你是初学者还是经验丰富的开发者,这个DEMO都将帮助你更好地掌握MINA框架,并将其应用于实际项目中。
对于初学者来说,这样的文档可以帮助快速理解和上手Mina,对于有经验的开发者,它也能提供必要的参考和解决实际问题的策略。 "java_mina"标签表明这个框架是用Java语言实现的,因此具备Java的跨平台特性。Mina利用...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写...无论是初学者还是经验丰富的开发者,都能从中受益,提升网络编程的能力。
### Apache Mina 2.0 中文参考手册关键知识点解析 #### 一、Apache Mina 概述 **Apache Mina** 是一个高度灵活且强大的网络应用程序...无论是对于初学者还是有经验的开发者来说,Mina 都是一个值得学习和使用的工具。
7. **学习路径**:对于初学者,资料可能给出了逐步学习Mina的建议,包括阅读官方文档、参与社区讨论和研究相关开源项目。 通过深入学习这份“Apache Mina入门(完成版)”资料,你将掌握使用Mina框架开发网络服务的...
而《mina中文开发手册.pdf》则可能是为初学者准备的,用中文详细解释了Mina的开发流程和常见用法。手册可能涵盖了Mina的基本概念,如Session、Filter、ProtocolCodec等,这些都是Mina框架的核心元素。此外,它可能...
【描述】进一步强调了这个资源包适用于初学者,包含Axis2的库文件,以及`org.apache.mina`相关的库文件。Apache Axis2是 Axis 的下一代版本,它是一个完整的Web服务引擎,用于处理Web服务生命周期的各个阶段,包括...
标签"mina 教程 中文版"表明了资源的性质,对于初学者或者不熟悉英文文档的开发者来说,这个中文版的教程将是一个非常有价值的参考资料。"MINA官方教程(中文版).docx"很可能包含了如何使用MINA框架进行网络编程的...
Apache MINA帮助文档,很详细,初学者的佳品!
### Apache Mina 详解 ...Apache Mina 是一个强大且灵活的网络通信框架,非常适合初学者入门使用。通过本篇文档的学习,希望读者能够对 Mina 的基本原理和使用方法有一个全面的认识,并能够在实际项目中灵活运用。
”示例旨在帮助初学者理解MINA的基本用法。 MINA的核心概念是基于NIO(非阻塞I/O)的事件驱动模型,它允许应用程序在处理多个连接时保持高效率。在MINA中,我们创建一个服务端来监听客户端的连接,并定义处理器来...
在本手册中,我们将深入探讨Apache Mina Server 2.0的各个方面,帮助初学者快速掌握其核心概念和使用方法。 首先,让我们了解Mina的基本架构。Mina采用事件驱动和非阻塞I/O模型,这种设计使得它能够在处理大量并发...
Apache Mina是一个开源项目,由Apache软件基金会维护,它是一个网络通信框架,专注于提供高性能、...对于初学者,阅读《Apache Mina入门(完成版)》PDF文档将是一个很好的起点,深入学习Mina的内部机制和实践技巧。
这份中文参考手册将全面覆盖以上知识点,对于想要学习和掌握Apache MINA框架的初学者来说,是一份不可或缺的参考资料。通过深入阅读和实践,开发者可以熟练运用MINA来构建高效、可靠的网络服务。
《Mina2.0快速入门与源码剖析》是一份快速上手指南,适合初学者。它会引导你完成Mina2的安装和基本应用开发,同时也会带你走进Mina的源码世界,帮助你理解框架内部的工作流程,这对于进一步的定制和扩展非常有帮助。...