Mina介绍

Mina可以用于快速的开发基于网络通信的应用,特别是在开发手机端的游戏应用时,使用的较为普遍。本文简单介绍了一个用Mina搭建的一个简易讨论组,通过该应用可以对Mina的基本用法用途有个大致的了解。

界面效果

界面元素不多,使用了两个AWT组件。

客户端1:

Apache Mina实战

客户端2:

Apache Mina实战

服务端日志:

Apache Mina实战

核心代码

服务端Handler

/**
 * <服务端消息Handler>
 * 
 * @author liping.action@gmail.com
 * @version V1.0
 */
extends IoHandlerAdapter {
private MsgQueue msgQueueReceived;
private MsgQueue msgQueueSent;
  10:     
public MsgQueue getMsgQueueReceived() {
return msgQueueReceived;
  13:     }
  14:  
void setMsgQueueReceived(MsgQueue msgQueueReceived) {
this.msgQueueReceived = msgQueueReceived;
  17:     }
  18:  
public MsgQueue getMsgQueueSent() {
return msgQueueSent;
  21:     }
  22:  
void setMsgQueueSent(MsgQueue msgQueueSent) {
this.msgQueueSent = msgQueueSent;
  25:     }
  26:  
static {
  28:         PropertyConfigurator.configure(ClassLoader
));
  30:     }
class);
  32:  
  33:     @Override
void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
  36:         logger.error(cause.toString());
  37:     }
  38:  
  39:     @Override
void messageReceived(IoSession session, Object message)
throws Exception {
  42:         Msg msg = (Msg) message;
 + msg.getContent());
  45:         Collection<IoSession> sessions = session.getService()
  46:                 .getManagedSessions().values();
  47:         msg.setId(session.getRemoteAddress().toString());
for (IoSession ioSession : sessions) {
  49:             ioSession.write(msg);
  50:         }
  51:     }
  52:  
  53:     @Override
throws Exception {
  55:         logger.info(Constant.MESSAGE_SENT);
  56:     }
  57:  
  58:     @Override
throws Exception {
  60:         logger.info(Constant.SESSION_CLOSED);
  61:     }
  62:  
  63:     @Override
throws Exception {
  65:         logger.info(Constant.SESSION_CREATED);
  66:     }
  67:  
  68:     @Override
void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
  71:         logger.info(Constant.SESSION_IDLE);
  72:     }
  73:  
  74:     @Override
throws Exception {
  76:         logger.info(Constant.SESSION_OPENED);
  78:                 + session.getRemoteAddress());
  79:     }
  80:  
  81: }

相关文章: