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];
}
}
- 定义一个父类:需要serverDataType,用于区分是那个action,发送数据encodeWithSend对象转成GPBMessage,接受数据decodeForServerData
- 每个子类都实现这三个,做到发送数据和接受数据自定义
- 解析时根据decodeForServerData去找到对应的实例,进行发送和接受数据
6. 启动时增量拉取信息
首次启动全量加载,加载圈。
非首次启动增量拉取数据。不同点由服务器端来判断。
网友评论