六-Mina学习之IOFilter接口

1.IOFilter

    对应用程序和网络的传输,就是二进制数据和对象之间的转换,有相应的解码和编码器。这也是过滤器的一种,还可以做日志、消息确认等功能。

2.IOFilter类图

    是在应用层和业务层之间的过滤层

3.完成自定义的过滤器

    就是在往Handler处理之前,需要调用相应的过滤器进行过滤。

    Client:业务Handler之前会调用过滤器。

    server:同样在接收到数据和发送数据的时候会调用过滤器,然后再交给我们的Handler.

public class MyServerFilter extends IoFilterAdapter{

	@Override
	public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
		System.out.println("MyServerFilter->messageReceived");
		nextFilter.messageReceived(session, message);
	}

	@Override
	public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
		System.out.println("MyServerFilter->messageSent");
		nextFilter.messageSent(session, writeRequest);
	}

}
public class MyClientFilter extends IoFilterAdapter{

	@Override
	public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
		System.out.println("MyClientFilter->messageReceived");
		nextFilter.messageReceived(session, message);
	}

	@Override
	public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
		System.out.println("MyClientFilter->messageSent");
		nextFilter.messageSent(session, writeRequest);
	}

}

public class MinaServer {
	static int port = 7080;
	static IoAcceptor accept = null;
	public static void main(String[] args) {
		try{
		accept = new NioSocketAcceptor();
		//设置编码过滤器
		accept.getFilterChain().addLast("codec", new ProtocolCodecFilter(
				new TextLineCodecFactory(
						Charset.forName("UTF-8"), 
						LineDelimiter.WINDOWS.getValue(),
						LineDelimiter.WINDOWS.getValue())));
		
		accept.getFilterChain().addFirst("filter", new MyServerFilter());
		
		//设置缓冲区的大小
		accept.getSessionConfig().setReadBufferSize(1024);
		//设置空闲时间
		accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		//设置Handler,真正处理的类
		accept.setHandler(new MyHandler());
		//绑定端口号
		accept.bind(new InetSocketAddress(port));
		//监听
		System.out.println("Server->"+port);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

public class MinaClient {
	private static IoSession session = null;
	private static String host = "127.0.0.1";//ip地址
	private static int port = 7080;//端口号
	
	public static void main(String[] args) {
		IoConnector connector = new NioSocketConnector();
		//设置超时时间
		connector.setConnectTimeout(3000);
		//设置过滤器
		connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(
				new TextLineCodecFactory(
						Charset.forName("UTF-8"), 
						LineDelimiter.WINDOWS.getValue(), //编码器
						LineDelimiter.WINDOWS.getValue())));//解码器
		
		connector.getFilterChain().addFirst("filter", new MyClientFilter());
		//设置处理类
		connector.setHandler(new MyClientHandler());
		//绑定地址
		ConnectFuture future = connector.connect(new InetSocketAddress(host, port));
		future.awaitUninterruptibly();//等待我们的连接
		session = future.getSession();
		session.write("你好,服务端");
		session.getCloseFuture().awaitUninterruptibly();//等待关闭连接
		connector.dispose();
		
	}
}

运行:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值