`
wx1569567608
  • 浏览: 63930 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

apache mina初学者提醒

 
阅读更多

提醒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

分享到:
评论

相关推荐

    apache Mina的完整学习资料

    这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语背景的开发者理解和实践。 Apache Mina的核心理念是提供一个与传输协议无关...

    apache mina实例免费下载

    压缩包中的"mina"文件很可能包含了MINA的示例代码,这些代码可以帮助初学者快速理解如何使用MINA框架。通过这些实例,你可以学习到如何配置Acceptor、创建Filter链、编写Handler以及如何处理各种网络事件。这些实例...

    Apache Mina 入门Demo

    8. **实战经验**:博主royal2xiaose的博客文章可能分享了如何使用Mina创建一个基础的网络服务,包括项目的初始化、编写过滤器、处理数据等步骤,为初学者提供了一个很好的学习起点。 通过深入学习和实践这个Apache ...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步...无论你是初学者还是经验丰富的开发者,这个DEMO都将帮助你更好地掌握MINA框架,并将其应用于实际项目中。

    Apache-Mina-2.rar_apache mina_java mina_mina_mina-core-1.1.3

    对于初学者来说,这样的文档可以帮助快速理解和上手Mina,对于有经验的开发者,它也能提供必要的参考和解决实际问题的策略。 "java_mina"标签表明这个框架是用Java语言实现的,因此具备Java的跨平台特性。Mina利用...

    apache-mina-2.0.7架包与源码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写...无论是初学者还是经验丰富的开发者,都能从中受益,提升网络编程的能力。

    apache mina 中文参考手册

    ### Apache Mina 2.0 中文参考手册关键知识点解析 #### 一、Apache Mina 概述 **Apache Mina** 是一个高度灵活且强大的网络应用程序...无论是对于初学者还是有经验的开发者来说,Mina 都是一个值得学习和使用的工具。

    Apache Mina入门(完成版)

    7. **学习路径**:对于初学者,资料可能给出了逐步学习Mina的建议,包括阅读官方文档、参与社区讨论和研究相关开源项目。 通过深入学习这份“Apache Mina入门(完成版)”资料,你将掌握使用Mina框架开发网络服务的...

    mina开发手册与mina完全自学手册.rar

    而《mina中文开发手册.pdf》则可能是为初学者准备的,用中文详细解释了Mina的开发流程和常见用法。手册可能涵盖了Mina的基本概念,如Session、Filter、ProtocolCodec等,这些都是Mina框架的核心元素。此外,它可能...

    初学调用webservice的demo,适合初学者入门,资源包括axis2的库文件,以及org.apache.mina等库文件

    【描述】进一步强调了这个资源包适用于初学者,包含Axis2的库文件,以及`org.apache.mina`相关的库文件。Apache Axis2是 Axis 的下一代版本,它是一个完整的Web服务引擎,用于处理Web服务生命周期的各个阶段,包括...

    apache-mina-2.0.7 含官方教程

    标签"mina 教程 中文版"表明了资源的性质,对于初学者或者不熟悉英文文档的开发者来说,这个中文版的教程将是一个非常有价值的参考资料。"MINA官方教程(中文版).docx"很可能包含了如何使用MINA框架进行网络编程的...

    Apache MINA api

    Apache MINA帮助文档,很详细,初学者的佳品!

    apache mina详细介绍,适合新手入门mina

    ### Apache Mina 详解 ...Apache Mina 是一个强大且灵活的网络通信框架,非常适合初学者入门使用。通过本篇文档的学习,希望读者能够对 Mina 的基本原理和使用方法有一个全面的认识,并能够在实际项目中灵活运用。

    Apache MINA (2) Hello World!

    ”示例旨在帮助初学者理解MINA的基本用法。 MINA的核心概念是基于NIO(非阻塞I/O)的事件驱动模型,它允许应用程序在处理多个连接时保持高效率。在MINA中,我们创建一个服务端来监听客户端的连接,并定义处理器来...

    这是Apache Mina Server 2.0的中文参考手册,版本为1.0

    在本手册中,我们将深入探讨Apache Mina Server 2.0的各个方面,帮助初学者快速掌握其核心概念和使用方法。 首先,让我们了解Mina的基本架构。Mina采用事件驱动和非阻塞I/O模型,这种设计使得它能够在处理大量并发...

    ApacheMina入门

    Apache Mina是一个开源项目,由Apache软件基金会维护,它是一个网络通信框架,专注于提供高性能、...对于初学者,阅读《Apache Mina入门(完成版)》PDF文档将是一个很好的起点,深入学习Mina的内部机制和实践技巧。

    Apache_Mina_Server_2.0.rar_mina

    这份中文参考手册将全面覆盖以上知识点,对于想要学习和掌握Apache MINA框架的初学者来说,是一份不可或缺的参考资料。通过深入阅读和实践,开发者可以熟练运用MINA来构建高效、可靠的网络服务。

    apache_mina2收集的教程

    《Mina2.0快速入门与源码剖析》是一份快速上手指南,适合初学者。它会引导你完成Mina2的安装和基本应用开发,同时也会带你走进Mina的源码世界,帮助你理解框架内部的工作流程,这对于进一步的定制和扩展非常有帮助。...

Global site tag (gtag.js) - Google Analytics