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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值