Apache Mina 学习笔记(3) - IoService

本章,我们讲述MINA的IoService - 一个在服务端、客户端提供所有I/O服务的基本类,作用于与对端的收发消息,管理sseions,连接等。

它是一个接口,在服务端由IoAcceptor实现,客户端由IoConnector实现。

我们会在下面这几部分中介绍这个接口:

  • IoService Introduction
  • IoService Details
  • IoAcceptor
  • IoConnector


IoService 简介


IoService 在Mina框架中提供基础的I/O服务,管理I/O Sessions。它是Mina十分关键的部分。



如上图所述,IoService有很多的职责:

  • 会话管理
  • 过滤链管理
  • Handler调用
  • 统计管理
  • 监听管理
  • 通讯管理
在这个接口中的方法:

  • getTransportMetadata();

当IoAcceptor或者IoConnector运行的时候,该方法返回传输的元数据,通常包括name(nio,apr,txtx),连接类型(面向连接或无连接)。

  • addListener

允许添加一个IoServiceListener去监听指定的事件

  • removeListener

移除一个指定的IoserviceListener

  • isDisposing

如果服务正在Dispose,那么返回服务的状态

  • isDisposed

如果服务已经Dispose,那么返回服务的状态

  • dispose

用来释放服务申请的所有资源,用户需要用上述两个方法先检查服务是否已经完全dispose。当你要关闭服务时,请务必调用该方法

  • getHandler

返回与服务关联的方法

  • setHandler

设置IoHandler去解决服务器得到的请求,该Handler包含了你的程序逻辑

  • getSessionConfig

返回session的配置

  • getFilterChainBuilder

返回Filter chain builder,当需要添加过滤的时候,需要调用该方法。



IoService 详细

Ioservice 这个接口在MINA中被两个重要的类实现:IoAcceptor 和 IoConnector。在服务端,你需要选择IoAcceptor,而在客户端你需要选用IoConnector。


IoAcceptor

在MINA中,有一些已经实现的类:

  • NioSocketAcceptor : the non-blocking Socket transport IoAcceptor
  • NioDatagramAcceptor : the non-blocking UDP transport IoAcceptor
  • AprSocketAcceptor : the blocking Socket transport IoAcceptor, based on APR
  • VmPipeSocketAcceptor : the in-VM IoAcceptor
选择一个你需要的IoAcceptor。

下图是IoAcceptor类和接口


IoConnector

  • NioSocketConnector : the non-blocking Socket transport IoConnector
  • NioDatagramConnector : the non-blocking UDP transport IoConnector
  • AprSocketConnector : the blocking Socket transport IoConnector, based on APR
  • ProxyConnector : a IoConnector providing proxy support
  • SerialConnector : a IoConnector for a serial transport
  • VmPipeConnector : the in-VM IoConnector

下面给出一个示例作为总结:

比如你要创建一个TCP server的时候,你可以写出类似如下的代码

public TcpServer() throws IOException {
    // Create a TCP acceptor
    IoAcceptor acceptor = new NioSocketAcceptor();

    // Associate the acceptor to an IoHandler instance (your application)
    acceptor.setHandler(this);

    // Bind : this will start the server...
    acceptor.bind(new InetSocketAddress(PORT));

    System.out.println("Server started...");
}
这样,创建了一个Tcp Server,如果你想创建一个UDP server,那么可以改为 IoAcceptor acceptor = new NioDatagramAcceptor();

要释放该连接,则可调用

acceptor.dispose(true)
添加一个过滤链,并将它添加到服务

// Add a logger filter
DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
chain.addLast("logger", new LoggingFilter());

// And inject the created chain builder in the service
acceptor.setFilterChainBuilder(chain);








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值