Mina的使用

Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。

1.I/O Service :负责处理I/O。
2.I/O Filter Chain :负责编码处理,字节到数据结构或数据结构到字节的转换等,即非业务逻辑的操作。
3.I/O Handle :负责处理业务逻辑

一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档):
•void exceptionCaught(IoSession session, Throwable cause)
当接口中其他方法抛出异常未被捕获时触发此方法
•void messageReceived(IoSession session, Object message)
当接收到客户端的请求信息后触发此方法
•void messageSent(IoSession session, Object message)
当信息已经传送给客户端后触发此方法
•void sessionClosed(IoSession session)
当连接被关闭时触发,例如客户端程序意外退出等等
•void sessionCreated(IoSession session)
当一个新客户端连接后触发此方法
•void sessionIdle(IoSession session, IdleStatus status)
当连接空闲时触发此方法
•void sessionOpened(IoSession session)
当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发

服务器端

package com.socket.server;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {
public static void main(String[] args) {
    //四步实现   网络处理和消息处理做分离   创建一个专门消息的消息类myserverhandler类来存储对象
    try {
        NioSocketAcceptor acceptor = new NioSocketAcceptor();//创建一个实例对象   第一步
        acceptor.setHandler(new MyServerHandler());//表示用myserverhandler用来做会话管理和消息处理
        acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new  MyTextLineFactory()));   //拦截器实现,用于发送和接收解码不同的数据有不同的拦截器,比如图片和文本就不同,拦截器就是接收到的是文本,拦截器就是文本拦截器,用来解析文本,图片就是解析图片
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);   //三种消息超时方式,一个读取或写入,一个读取,一个写入,如果多长时间没有发送消息,证明超时    时间单位是秒,不是毫秒
        acceptor.bind(new InetSocketAddress(9999));   //绑定端口9999    第四部
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}


















package com.socket.server;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class MyServerHandler  extends IoHandlerAdapter{

    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
//会话出现异常创建方法
        System.out.println("exceptionCaught");
    }

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        //收到消息创建
        System.out.println("messageReceived");
        System.out.println((String)message);
        session.write("hahahahahahahaha");   //发送消息是使用iosession,调用write来返回数据



    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        //发送消息创建
        System.out.println("messageSent");
    }

    @Override
    public void sessionClosed(IoSession session) throws Exception {
        //关闭消息创建
        System.out.println("sessionClosed");
    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        //建立消息创建
        System.out.println("sessionCreated");
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status)
            throws Exception {
        //超时消息创建   
        //用于是否掉线,或者设置状态
        System.out.println("超时");
        session.write("超时");
    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {
//会话打开时创建方法
        System.out.println("sessionOpened");
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值