关于MINA和Android指令收发

关于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: ");
			}
		});
	}

利用MINA建立长连接的细节可以看这篇


收发指令:

关系建立了恋爱隧道,指令在其中双向穿梭。现在还需要一个恋爱关系局来负责维持秩序;

恋爱关系局组织结构:

  • 领导:局长 ICommand(Interface)
    • IInCommand:来副局长
      • MZCommand1:妹子无尽要求之一部;
      • MZCommand2:妹子无尽要求之二部;
    • IOutCommand:往副局长
      • URRequest1:你的谄媚请求之一部;
      • URRequest2:你的谄媚请求之二部;

正局长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的使用,写着写着就胡言乱语了。

undefined
undefined

posted @ 2016-10-01 19:16  shadowxs  阅读(70)  评论(0)    收藏  举报