前言
QQ是我们熟知的且生活中处处会应用的软件,它主体是C/S架构(客户端—-服务器结构),但是已经被改良,很多界面使用了B/S结构(浏览器—-服务器结构)。查找资料我发现老版的腾讯QQ是标准的C/S结构,而当前的QQ主程序变成了一个框架,而里面很多模块使用了B/S结构,这样就算程序在运行也可以更新,也使占用空间更小对处理器的负荷更小,也使应用更加方便快捷。
关键词:QQ;软件结构分析;C/S架构;B/S架构
一、引言
QQ是我们熟知的且生活中处处会应用的软件,查找资料我们发现QQ运用了C/S架构(客户端—-服务器结构)+部分模块B/S结构(浏览器—-服务器结构)的模式。QQ在架构上已经很成熟了,这种架构使用户的使用感更好,交互性更强,网络通信量低,响应速度快,且利于处理大量数据。更加负荷它移动社交软件的产品定位,给用户带来更好的服务,并在完成移动社交的任务之后还可以添加娱乐模块和生活服务的模块。
二、主要功能模块
QQ的软件功能定位为移动社交,并将娱乐与生活服务相结合的软件。而细细观察QQ的主要功能大体可以分为登录注册,消息,聊天,联系人,动态,侧边栏等几大模块.其中消息模块和聊天模块是核心模块.好友动态及联系人属于次核心模块。
整体模块结构如下图所示:
QQ整体通过的是模块化的设计方式,数据和UI分离保存设计。包含消息,聊天等主要聊天功能的接口封装为独立Target。当有消息进来或发送消息的时候,设计的是会进行相应的UI更新,带给用户直观的使用体验。而查找资料我们也发现为了增强用户体验,消息,聊天,联系人,动态,侧边栏等都采用Native的开发方式,结合热更新技术对UI进行动态调整.游戏,会员,装扮等个性化内容由于变幻多样,无法使用Native的方式,所以qq的设计师采用的是H5的方式。但一般的H5页面都会牺牲部分用户体验,但QQ通过其强大的服务端支持使H5页面也能达到原生的流畅效果。
*消息通知模块:
消息模块的消息类型繁多复杂.消息类型包括普通消息,群消息和系统消息.普通消息仅处理一对一聊天的情况;群消息处理群聊天情形.系统消息则根据用户自定义进行个性化推送.
*聊天界面:
主要是针对多种类型消息的UI处理。这个模块对每种消息类型提供服务支持。内容处理方面,语音信息和图片信息涉及本地缓存,将语音的ID或图片的名称以及语音(图片)内容进行压缩处理并分别作为key和value进行本地化存储。其他信息进行数据库加密缓存起来。时间处理方面,发送消息时间通过毫秒处理,并将发送时间一同发给服务器,服务器以发送的时间为准进行排序,而不以接收到消息时间为准。这样避免多个消息出现顺序错乱的现象。
*动态:
动态页面时时更新,这一部分运用B/S的架构模式,使运行时不需要安装客户端,可以直接运行在Web并可以实现多客户端访问的目的以及交互方式。升级和更新更加方便。
*联系人:
从当前用户输入到用户端的主页面上的信息,传递给服务器进行相应的操作,在用户信息表中做增加删除查找好友的指令,最后再把所需的页面传给用户的用户端主页上,更新现在的信息。
三、整体架构分析:
QQ的主体是C/S架构,但是已经被改良,很多界面使用了B/S结构。查找资料我们发现老版的腾讯QQ是标准的C/S结构,而当前的QQ主程序变成了一个框架,而里面很多模块使用了B/S结构。所以不难看出QQ运用了C/S架构(客户端—-服务器结构)+部分模块B/S结构(浏览器—-服务器结构)的模式。
优点:主体的C/ S体系结构使整个软件的接口和操作可以非常丰富,且快捷方便。同时安全属性可以轻松保证,实现多层认证。同时因为C/S体系结构一般只进行一层交互,所以软件的反应速度会很快。而里面的部分模块使用B/S体系结构,将模块功能实现的核心部分集中到了服务器上,简化了系统的开发、维护和使用。只需要安装一个浏览器和数据库,就可以让浏览器通过Web Server同数据库进行数据交互。不需要再次安装模块使用的客户端,就可以直接运行在Web浏览器中,而由于不需要安装客户端,因此在更新模块的时候就不存在更新多个客户端以及升级服务器等问题。QQ在架构上已经很成熟了,这种架构使用户的使用感更好,交互性更强,网络通信量低,响应速度快,且利于处理大量数据。更加负荷它移动社交软件的产品定位,给用户带来更好的服务,并在完成移动社交的任务之后还可以添加娱乐模块和生活服务的模块。
缺点:但同时因为使用了这种架构,该程序需要安装后才能使用,因此不适合某些未知用户。同时在维护时会带来大量的成本消耗,一次升级,所有客户端应用程序都需要更改,只能花费大量的资源来提醒更新。而且这种构架加上QQ软件的业务范围庞大,如果不进行新能优化,在之后会使用体验将大大下降,无以支撑腾讯庞大的用户诉求。
四、业务范围:
QQ的业务范围与其可以使用的功能息息相关,看上面的主要功能方面我们就可以知道,QQ的主要功能大体可以分为登录注册,消息,聊天,联系人,动态,侧边栏等几大模块。更加侧重于社交,更娱乐化。而其中消息模块和聊天模块是核心模块.好友动态及联系人属于次核心模块。所以也不难总结出QQ的业务范围主要是一个移动社交的软件,但同时QQ的制作团队还在其上添加了娱乐与生活服务的板块,并利用每个模块自身的特性采用了不同的开发方式。
大体可以分为下面7类:
1.即时通讯:QQ、TM、企业QQ、RTX、浏览器、QQ邮箱、Foxmail、QQ影音等;
2.网络媒体:腾讯网、腾讯搜搜等;
3.无线互联网增值:手机QQ、手机腾讯网、超级QQ、手机游戏、手机QQ音乐等;
4.互动娱乐:大型MMOG网游、FPS游戏、Q版MMOG、休闲游戏、桌面游戏、游戏平台等;
5.互联网增值:QQ空间、QQ秀、QQ音乐、各种会员、QQ音乐、QQlive等;
6.电子商务:拍拍网、财付通;
7.广告:各种广告,视频广告和广告推广。
五、用户群体:
QQ更加侧重于社交,更娱乐化。QQ的用户群体我认为主要可以分为三大类:追求潮流的学生群体,上网络视频课的老师和学生,需要经常传输数据的办公室人员,货代公司,设计人员等。由腾讯公布的2020年财报显示,QQ智能终端月活跃账户数为6.935亿,环比增长7.2%疫情的影响下唤醒了5000万的低活跃度用户。在这个里面超过1.2亿用户参与线上教学和学习,在QQ上单日最多有超过2000万人通过群通话、群课堂参与网课直播,有近1400万人通过群作业功能提交线上作业。小学、初中、高中、大学线上课程,线上作业全面落地,带动了线上教学、线上答题、线上培训、线上作业、线上考试的全面功能推进。
QQ这款软件是80后一代人的记忆,而经过这么久之后仍是人们线上交流的移动社交软件里不可或缺的,原因之一是因为微信产品更注重隐私,隐私大于便利。QQ整体更热闹,功能多样化,方便大于隐私,二是因为QQ的功能充足,比微信等工具功能更加多,方便人们的使用。
六、运行环境:
QQ覆盖了Windows、macOS、iPadOS、Android、iOS、Harmony OS、Windows Phone、Linux等多种操作平台。
七、设计模式:
QQ使用的是工厂方法模式。就如上面架构分析里说的,QQ使用的是C/S+B/S的架构,所以和上面的架构相匹配,工厂方法模式在如果想增加功能时,只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,无需去改动现成的代码。这样做,拓展性较好,不需要多次更改客户端的软件。使软件更符合开-闭原则,新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可。也更加符合单一职责原则每个具体工厂类只负责创建对应的产品。
但同时这种方法添加新模块时,除了增加新产品类外,还要提供与之对应的具体工厂类,系统类的个数将成对增加,在一定程度上增加了系统的复杂度;同时,有更多的类需要编译和运行,会给系统带来一些额外的开销;由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。虽然保证了工厂方法内的对修改关闭,但对于使用工厂方法的类,如果要更换另外一种产品,仍然需要修改实例化的具体工厂类;一个具体工厂只能创建一种具体产品。
八、参考文献:
【1】QQ需求分析报告 (https://www.docin.com/p-733230562.html)
【2】21种设计模式(https://blog.csdn.net/qq_42349617/article/details/86661852)
【3】QQ架构分析(https://www.jianshu.com/p/877c07baa44e)
【4】工厂方法模式(Factory Method)-最易懂的设计模式解析(https://blog.csdn.net/varyall/article/details/82355964)
总结
以上就是今天要讲的内容,本文仅仅简单叙述了QQ软件结构,有出错或者不严谨的地方欢迎大家给出意见。