文档章节

Mina初探

诚实可靠小郎君666
 诚实可靠小郎君666
发布于 2017/06/02 15:00
字数 350
阅读 101
收藏 0

最近由于工作内容比较空闲,加上对于Java网络框架方面知识的欠缺,决定深入学习NIO框架Mina及Netty;以下是Mina框架最简单的HelloWorld Demo。

MinaServer:
public class MinaServer {
    public static void main(String[] args){
        try {
            //创建一个IoAcceptor实例
            NioSocketAcceptor acceptor = new NioSocketAcceptor();
            //添加解码器
            acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));
            //添加日志
            acceptor.getFilterChain().addLast("logger", new LoggingFilter());
            //指定IoHandler
            acceptor.setHandler(new MinaServerAdapter());
            //绑定端口
            acceptor.bind(new InetSocketAddress(Constants.PORT));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
MinaServerAdapter
public class MinaServerAdapter extends IoHandlerAdapter {
    //sessionCreated:创建时回调
    @Override
    public void sessionCreated(IoSession session) throws Exception {
        System.out.println("sessionCreated");
    }
    //sessionOpened:打开时回调
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        System.out.println("sessionOpened");
    }
    //sessionClosed:关闭时回调
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.println("sessionClosed");
    }
    //sessionIdle:进入空闲时回调
    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("sessionIdle");
    }
    //出现异常时回调
    @Override
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        cause.printStackTrace();
        System.out.println("exceptionCaught:"+cause.getMessage());
    }
    /**
     * 接收到消息时回调
     */
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String str = message.toString();
        System.out.println("Received Message is: " + str);
        if("exit".equals(str)){
            System.out.println("client exit: " + str);
            session.write("client exit");
            session.closeNow();
            return;
        }
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        session.write(format.format(date)+" Received Client Message : "+message);
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
    }
}

此时运行MinaServer的main方法,即可启动Mina服务端。在windows系统下启动CMD/Unix系统下启动终端,输入telnet IP PORT链接到Mina服务端,并可向Mina服务端发送消息。

当Mina服务端收到exit字符串时,回话结束。

© 著作权归作者所有

共有 人打赏支持
诚实可靠小郎君666
粉丝 1
博文 9
码字总数 5353
作品 0
昆明
私信 提问
MINA项目1.1.7做的项目 更新到MINA 2.0.2,很多东西报错?

MINA 1和mina 2 到底有什么区别呀,哪里也找不到介绍区别的,有没有大家总结的资料呀,给小弟参考下。 我们原来的项目是用MINA 1 做的,现在要升级到mina2,但引进去后,报了好多错误,好多东...

erwei1983
2010/12/24
1K
5
NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

前言 NIO框架的流行,使得开发大并发、高性能的互联网服务端成为可能。这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2、而Netty的主要版本是Netty3和Netty4(Netty5已经被...

JackJiang-
2016/06/24
349
0
android 推送 androidpn 问题

web 服务端错误信息: : RCVD: {ERROR} [2012-08-27 14:21:36,193]

玉良
2012/08/27
2.6K
5
Mina java.nio.BufferUnderflowException 到底怎么回事!?

运行个几分或十几分钟就会报错! 02:32-[com.yiuxn.middleware.collector]-[WARN] EXCEPTION : org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.BufferUnderflowException......

HuaChen
2011/10/25
10.9K
2
Apache MINA 2.0.10 发布,高性能 Java 网络框架

Apache MINA 2.0.10 发布,此版本是个 bug 修复版本,无新特性,主要修复: - SSL 处理器一个竞态条件 - 一些 OSGi 包声明修复 - 移除解码器的一个锁,加速 MINA 下载: ========= *http://...

oschina
2015/12/20
2.9K
15

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
3
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
5
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
4
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部