美文网首页
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