关于MINA和Android指令收发
背景交代:
全拼:Multipurpose Infrastructure for Network Applications
谈谈MINA在各个网络库的基础使用经验(客户端),以及Android中的指令收发。
概述:一个长连接就像一场男女关系。
关系
关系是一切的根基
- 长期稳定的关系建立在每一次的心跳之上:
- SocketConnector(初见):开始锁定目标妹子;
- ConnectTimeoutMillis(考验期):在限定时间内,还没能和妹子搭上线就该out了;
- Filter(筛子):搭上线,没法和妹子好好交流也白搭;
- ProtocolCodecFilter(翻译):女人的心思最难猜,发个消息都要解码;
- Handler(套路):面对解码得到的消息,你要有处理的套路,不然会手忙脚乱;
- ConnectionListener(监控):要时刻留意你在妹子心中的地位,不然出局的时候你还一脸懵逼;
- 心跳包:要想建立长期稳定的可持续发展的男女关系,就要一直保持心动的感觉,定时发送你的心跳包;
请看代码世界的男女关系:
SocketConnector mSocketConnector;
IoSession mSession;
IConnectionListener mConnectionListener;
//初见,锁定目标
mSocketConnector = new NioSocketConnector();
//考验期
mSocketConnector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
//筛子
mSocketConnector.getFilterChain().addLast("logger", new LoggingFilter());
mSocketConnector.getFilterChain().addLast("exceutor", new ExecutorFilter());
mSocketConnector.getFilterChain().addLast("protocal", new ProtocolCodecFilter(new MyCodesFactory())); //翻译
mSocketConnector.setHandler(new MessageHandler(context,mListener)); //套路
//监控
mSocketConnector.addListener(new IoServiceListener() {
@Override
public void serviceActivated(IoService ioService) throws Exception {
Log.d(TAG, "serviceActivated: ");
}
@Override
public void serviceIdle(IoService ioService, IdleStatus idleStatus) throws Exception {
Log.d(TAG, "serviceIdle: ");
}
@Override
public void serviceDeactivated(IoService ioService) throws Exception {
Log.d(TAG, "serviceDeactivated: ");
}
@Override
public void sessionCreated(IoSession ioSession) throws Exception {
Log.d(TAG, "sessionCreated: ");
mConnectionListener.onConnected();
//空白期要有套路,不然药丸
ioSession.getConfig ().setReaderIdleTime (3);
}
@Override
public void sessionClosed(IoSession ioSession) throws Exception {
Log.d(TAG, "sessionClosed: ");
mConnectionListener.onDisconnected();
}
@Override
public void sessionDestroyed(IoSession ioSession) throws Exception {
Log.d(TAG, "sessionDestroyed: ");
}
});
}
收发指令:
关系建立了恋爱隧道,指令在其中双向穿梭。现在还需要一个恋爱关系局来负责维持秩序;
恋爱关系局组织结构:
- 领导:局长 ICommand(Interface)
- IInCommand:来副局长
- MZCommand1:妹子无尽要求之一部;
- MZCommand2:妹子无尽要求之二部;
- …
- IOutCommand:往副局长
- URRequest1:你的谄媚请求之一部;
- URRequest2:你的谄媚请求之二部;
- …
- IInCommand:来副局长
正局长ICommand麾下有两位副局长:IInCommand和IOutCommand,他们的代号是Interface。两位副局相辅相成,双贱合璧;
作为领导,二位当然只负责来、往的套路,具体细节交给各有关部门实施;
且看代码:
- 正局长:
public interface ICommand {
int getInstruction();
String getName();
}
- 来副局(继承局长的意志):
public interface IInCommand extends ICommand{
public IInCommand decode(byte[] data)throws CommandDataError;
public void execute(ICommandContext context);
}
- 往副局(继承局长的意志):
public interface IOutCommand extends ICommand{
byte[] encode();
}
- 各小分部(继承副局的意志):
public class MZCommand1 implements IInCommand
public class URRequest1 implements IOutCommand
恋爱关系局工作流程:
- 接受指令:接受原始指令—>请示来局长—>根据领导批示解码指令—>请示来局长—>根据领导批示处理指令要求;
- 发送指令:准备指令信息—>请示往局长—>根据领导批示编码—>发送指令;
总结
本来想总结一下MINA的使用,写着写着就胡言乱语了。