首页 > OOP语言 > 其它 > 正文

使用 Apache MINA 2 开发网络应用
2012-03-28 00:00:00   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

I/O 处理器

I/O 事件通过过滤器链之后会到达 I/O 处理器。I/O 处理器中与 I/O 事件对应的方法会被调用。Apache MINA 中 org.apache.mina.core.service.IoHandler是 I/O 处理器要实现的接口,一般情况下,只需要继承自 org.apache.mina.core.service.IoHandlerAdapter并覆写所需方法即可。IoHandler接口的方法如 表 6 所示。

表 6. IoHandler 接口的方法

方法 说明
sessionCreated(IoSession session) 当有新的连接建立的时候,该方法被调用。
sessionOpened(IoSession session) 当有新的连接打开的时候,该方法被调用。该方法在 sessionCreated之后被调用。
sessionClosed(IoSession session) 当连接被关闭的时候,此方法被调用。
sessionIdle(IoSession session, IdleStatus status) 当连接变成闲置状态的时候,此方法被调用。
exceptionCaught(IoSession session, Throwable cause) 当 I/O 处理器的实现或是 Apache MINA 中有异常抛出的时候,此方法被调用。
messageReceived(IoSession session, Object message) 当接收到新的消息的时候,此方法被调用。
messageSent(IoSession session, Object message) 当消息被成功发送出去的时候,此方法被调用。

对于 表 6 中的方法,有几个需要重点的说明一下。首先是 sessionCreated 和 sessionOpened 的区别。sessionCreated方法是由 I/O 处理线程来调用的,而 sessionOpened 是由其它线程来调用的。因此从性能方面考虑,不要在 sessionCreated 方法中执行过多的操作。对于 sessionIdle,默认情况下,闲置时间设置是禁用的,也就是说 sessionIdle 并不会被调用。可以通过 IoSessionConfig.setIdleTime(IdleStatus, int) 来进行设置。

Apache MINA 中的基本概念已经介绍完了,下面介绍状态机的使用。

使用状态机

在 I/O 处理器中实现业务逻辑的时候,对于简单的情况,一般只需要在 messageReceived 方法中对传入的消息进行处理。如果需要写回数据到对等体的话,用 IoSession.write 方法即可。在另外的一些情况下,客户端和服务器端的通信协议比较复杂,客户端其实是有状态变迁的。这个时候可以用 Apache MINA 提供的状态机实现,可以使得 I/O 处理器的实现更加简单。

状态机中两个重要的元素是状态以及状态之间的迁移。示例应用中客户端的状态以及迁移如 图 5 所示。

图 5. 联机游戏示例应用中客户端的状态以及迁移

\

相关热词搜索:

上一篇:使用Blueprint Container规范构建OSGi应用程序
下一篇:结合使用 Apache Geronimo 和 Lift

分享到: 收藏