美文网首页
iOS IM通讯:做了哪些设计让消息模块稳定

iOS IM通讯:做了哪些设计让消息模块稳定

作者: 某非著名程序员 | 来源:发表于2021-03-04 23:17 被阅读0次

    1. 分模块

    会话模块:包括会话、消息、组织、我的、最近联系人、会议、群成员、群禁言、群资料等。

    2.模块分层:service、cache、DB层

    职责更加清晰,出了问题容易排查
    也会出现cache与DB不一致问题,这种最好能在觉得有问题的地方做个断言,出现问题容易排查。

    3. DB层设计

    消息需要考虑无网或者有网的时候怎么拉取
    设计消息块,用最新的块与历史的消息块进行融合

    4. 内存消息设计

    采用双指针对两个有序消息进行合并,不需要字典去重
    像已读、未读需要查找内存中的消息,采用二分查找

    5. 消息一对多转发设计

    例如我收到一条消息,可能需要通知到会话详情页,也有可能通知到会话列表页。
    针对很多场景需要用到,我怎么设计这种一对多的消息转发。

    6. socket消息机制

    怎么设计多个消息进行消息发送

    - (DolpDelegateResponse *)decodeForServerData:(DolpBaseData *)baseData {
        return nil;
    }
    
    - (DolpServerDataType)serverDataType {
        return DolpServerDataTypeNIL;
    }
    
    - (GPBMessage *)encodeWithSend:(id)data {
        return nil;
    }
    
    static NSMutableDictionary *kActionRoutes;
    
    + (void)register {
        if (kActionRoutes == nil) {
            kActionRoutes = [[NSMutableDictionary alloc] init];
        }
    }
    
    1. 定义一个父类:需要serverDataType,用于区分是那个action,发送数据encodeWithSend对象转成GPBMessage,接受数据decodeForServerData
    2. 每个子类都实现这三个,做到发送数据和接受数据自定义
    3. 解析时根据decodeForServerData去找到对应的实例,进行发送和接受数据

    6. 启动时增量拉取信息

    首次启动全量加载,加载圈。
    非首次启动增量拉取数据。不同点由服务器端来判断。

    相关文章

      网友评论

          本文标题:iOS IM通讯:做了哪些设计让消息模块稳定

          本文链接:https://www.haomeiwen.com/subject/gzyctltx.html