QQ架构分析

2018-02-28  本文已影响0人  金约21依代

产品定位

定位移动社交,并将娱乐与生活服务相结合.

整体架构模块分析

QQ主要分为登录注册,消息,聊天,联系人,动态,侧边栏,设置等几大模块.其中消息模块和聊天模块是核心模块.好友动态及联系人属于次核心模块,延续了PC端的界面结构.

整体模块结构如下图所示:


整体通过模块化设计,数据和UI分离.包含消息,聊天等主要聊天功能的接口封装为独立Target.
通过长连接的方式,当有消息进来或发送消息的时候,进行相应UI更新.

为增强用户体验,消息,聊天,联系人,动态,侧边栏等都采用Native的开发方式,结合热更新技术对UI进行动态调整.
游戏,会员,装扮等个性化内容由于变幻多样,无法使用Native的方式"一劳永逸",故采用的是H5的方式.一般H5页面会牺牲部分用户体验,但QQ通过其强大的服务端支持,H5页面也能达到原生的流畅效果.

核心模块分析

登录注册以及主界面消息模块
登录问题需要考虑到以下几点:
  1. 被迫下线问题:如果在线状态下,其他设备登录,会及时发送当前设备下线通知,界面通过UIWindow展示通知Alert,不允许用户进行非登录操作. 启动App时会进行免登操作,这时和后台进行交互,如果有被挤下线,提示登录,否则进行免登处理.
  2. 是否允许电脑端和手机端同时在线问题:后台存储登录当前设备的信息,比如设备名称,型号等.如果设置允许电脑手机同时在线,后台将对手机和电脑同时提供服务支持,被迫下线问题将被区分单独处理.而如果不允许同时在线,那么被迫下线问题会把电脑,手机视为一体混同处理.
消息模块

消息模块的消息类型繁多复杂.
消息类型包括普通消息,群消息和系统消息.普通消息仅处理一对一聊天的情况,群消息处理群聊天情形.系统消息则根据用户自定义进行个性化推送.


  1. 消息类型处理:
    逻辑处理放在后台,客户端只管拉取数据.接口给到消息类型,客户端通过多个CellID进行不同消息类型处理
  2. 活动,比如抢红包:
    后台发送抢红包通知,界面通过TabeleHeaderView进行活动展示,并修改下拉刷新功能,下拉刷新不再对当前消息界面进行刷新,而是对围绕红包弹幕进行功能改造.
  3. 置顶问题:
    QQ的置顶功能是信息存储在本地.将置顶的这一条数据保存到数据库,再次请求数据时将数据与数据库的进行对比,发现相同的就置顶 .这里应对数据结构进行模型和功能划分,使得置顶逻辑清晰易懂,否则后续涉及到和其他业务逻辑的对撞很容易让代码杂乱无章.
聊天模块

首先看看聊天中的多种消息类型:


具体如下所示:


聊天界面主要是针对多种类型消息的UI处理.各种消息类型组成一个独立的代码模块,这个模块对每种消息类型提供服务支持.

语音信息和图片信息涉及本地缓存,将语音的ID或图片的名称以及语音(图片)内容进行压缩处理并分别作为key和value进行本地化存储.其他信息进行数据库加密缓存起来.

时间处理方面,发送消息时间通过毫秒处理,并将发送时间一同发给服务器,服务器以发送的时间为准进行排序,而不以接收到消息时间为准.这样避免多个消息出现顺序错乱的现象.

聊天发送消息面板功能

这里每个面板功能都是对相关代码的高度封装.通过一个模块将这些功能做成"元件",通过工厂化模式进行对应调用.

对性能优方面的思考

QQ软件庞大,如果不进行新能优化,使用体验将大大下降,无以支撑腾讯庞大的用户诉求.

启动速断性能优化

1.main()函数之前的优化
2.main()函数之后的优化
上一篇 下一篇

猜你喜欢

热点阅读