MpushClient架构设计

1. 架构图

2. 说明

  1. MpushClient主要是为Android客户端设计,作为Android底层通信组件

  2. MpushClient实现了所有Mpush的协议,也包加密,压缩等特性

  3. MpushClient对SDK只暴露了3个对象:Client、ClientConfig、ClientListener

  4. ClientConfig提供了所有支持对配置设置项,所有的配置都必须使用此对象设置

  5. Client主要暴露一些往服务端上行的方法,常用的有:

    public interface MPushProtocol {
    
        boolean healthCheck();//健康检查,读写超时检查,发送心跳
    
        void fastConnect();//快速重连
    
        void handshake();//握手交互密钥
    
        void bindUser(String userId);//绑定用户到链接
    
        void unbindUser();//解绑
    
        Future<HttpResponse> sendHttp(HttpRequest request);//发送HTTP代理亲求
    }

  6. 所有服务端下行的消息都直接转交给ClientListener来处理:

    public interface ClientListener {
    
        void onConnected(Client client);
    
        void onDisConnected(Client client);
    
        void onHandshakeOk(Client client, int heartbeat);
    
        void onReceivePush(Client client, byte[] content);
    
        void onKickUser(String deviceId, String userId);
    }

  7. 定时发送心跳部分的定时功能,MpushClient没有去实现,因为Android有比Timer更好的实现AlarmManager, 所以定时功能由SDK收到onHandshakeOk事件时去触发。

  8. 内部组件主要有:Connection、PacketReader、PacketWriter、PacketDispatcher、MessageHandler、ExecutorManager、AllotClient

  9. Connection负责TCP链接创建、维护、关闭、重连及校验读写超时时间等

  10. AllotClient负责从AllotServer获取最新的MpushServer IP地址列表

  11. PacketReader 负责数据包的解码及沾包、半包的处理,独占一个线程负责消息的读取。

  12. PacketWriter负责数据发送数据内部维护一个只有一个线程的线程池,如果发送失败,会尝试重发直到超时。

  13. PacketReader、PacketWriter内部还分别维护了一个ByteBuf使用的是堆外内存(allocateDirect)该buffer只分配一次后续一直重复使用,避免反复的分配内存和垃圾回收,这点对于客户端还是非常有意义的。

  14. PacketDispatcher负责根据PacketCommand把包分发到相应的MessageHander

  15. MessageHandler主要负责把Packet反序列化为业务Message包括解码和解压,并处理相应的业务逻辑,比如触发下一步的请求,或通知Listener

  16. ExecutorManager负责整个客户端的线程、线程池的分配和销毁。

Copyright © ohun.com 2016 all right reserved,powered by Gitbook该文件修订时间: 2016-08-31 16:22:28

results matching ""

    No results matching ""