本文2624字,预计阅读时长8-10分钟
引言
上周,和一投资大佬吃饭,闲谈间大佬聊到些趣事:说QQ当年想卖100万,结果被某老板嫌弃,说找上三个大学生,一个月便能做出一个来。结果没有卖成。我们听后哈哈一笑。大佬继续说:结果到现在过去20年了,BAT后面有了TMD,但是IM领域却没人能取代T。于是我们沉默了……
20年的时光流逝,QQ和微信依旧屹立不倒,依旧牢牢占据着即时通讯的大半江山。那岂不是这辈子就和企鹅了?不是不是这块市场只能捡一捡边角料了?难道只能去抢那残羹冷炙?……
那怎么可能!大佬于是开启了嘴炮模式:QQ和微信只是在社交领域占据了大部分的市场,其他领域依旧没有摸到边。泛娱乐领域陌陌、探探、soul之类你说他们哪一个不是即时通讯?PVP、MMORPG网游里的聊天和工会系统,那一个不属于即时通讯?越来越多的游戏强调社交化,更别提元宇宙了,核心的基础就是递烟似的各类型聊天。所以啊,只要把即时通讯做好,需求会越来越多~
不对啊,大佬,做即时通讯的公司不少啊,那不是我们没有什么机会了吗?
咳、咳,你们觉得市面上那些号称向腾讯看齐,并发动则千亿的公司,那个像是有上千万日活的节奏?你只要在你们已有的基础上做一个类似的,做得好做得快,做得稳定,不愁没人愿意用。
不得不说,大佬就是大佬,直接套路了我们。
没想到,这是个套路一,让我们走上这条不归路。更没想到的是,套路二是个天坑。
按照节奏,接下来团队需要网上找找资料、看看教程,学习学习,涨涨经验。
打开百度/谷歌,搜索IM教程,打开链接,开始学习,然后,就没有然后了。网上的各种教程和指南,都是告诉你“三行代码一分钟接入”,可是,可是?可是……怎么看来看去,怎么看都像是产品的宣传,几个简单的页面效果展示,就告述你,一个新的APP这样就诞生了……
用户注册?数据管理?UI间的交互与切换?……?
诞生了?你骗我!你骗我!!~~
哎,套路啊~~一切都是套路!!!
所以,我们痛定思痛,决定亲自趟一遍这天坑,把所谓的“加一点细节”完全反套路出来。于是,便有了这篇文章。
本系列文章将和各位读者一起,从零开始构建一个像样可用的即时通讯APP。本系列文章将包含所有全套代码、可构建的项目工程,以及流程设计与分析说明。
最终生成的APP,可参见下面的动画展示:
https://www.bilibili.com/vide...
目前所有代码已经更新到GitHub,项目地址:https://github.com/highras/rt...
全套代码(含服务器端)约4000余行,配合介绍解说,4小时内便可充分理解。
为了便于读者更易于理解,和方便作者介绍,全文一共分为四个章节,分别为:
一、功能设计与介绍(本文)
二、UI设计与搭建(【链接地址】)
三、App 内部流程与逻辑(【链接地址】)
四、服务端搭建与总结(【链接地址】)
一、功能设计
首先,一个完整的IM APP,从功能和外观上看,必须包含的模块如下:
登陆
注册
联系人列表
会话列表
聊天窗口
联系人信息展示
深入一下,其实会话还分成一对一会话,群组会话,和聊天室会话。也许有人会问,群组和聊天室有什么区别?其实区别很简单,群组就像公司,不论员工是否在办公室,该发的工资一定会发。这种关系是长期存在,而不论群组成员是在线还是离线。而聊天室就像一个直播间,离开了,主播还在说什么就和你没有关系了。聊天室其实就是一种临时性的组织,离开,或者用户下线,所属关系就不再存在。就好比一场MOBA,不论是王者荣耀还是LOL,提前离开的队友,将不再影响当前的战局。
那我们再进一步深入:用户需要管理,数据需要存储,用户和组织的信息还需要进行编辑。我们不希望自己幸幸苦苦运营的用户成为厂商平台的用户,所以我们需要有自己的用户注册和管理体系,而不是简单使用云厂商所提供的用户注册模块,不然就又回到了为别人打工的日子。这就要求我们必须要有自己的后端,而且尽可能的不要将用户的信息透露给平台厂商。此外我们还需要数据的存储,不论是后端用户信息的登记和存储,还是端APP聊天消息的存储。
所以整理一下,一个合格的IM至少需要具备以下模块:
APP 端(移动端):
登录模块
注册模块
联系人列表
会话列表
聊天窗口
联系人信息的展示与编辑
本地数据存储
后端(服务端):
用户管理与注册
数据存储
之后,面对的问题就是,APP端如何与后端通讯?而这将引出一系列的问题:
用什么通讯协议?数据如何传输?二进制如何处理?网络切换如何处理?数据安全怎么实现?如果服务器被攻击了,该如何防御?……最后,如果某一天火了,高并发怎么实现?
后端细节纷繁芜杂,而且更多的是独立于IM的通用需求,诸如数据传输,信息安全,攻击防御,等等。因此,为了不偏离主题,我们在此简化服务端的处理,把它变成:
- 自己实现一个最简化的服务端,处理用户的注册和管理,坚决不把用户的信息透露给平台厂商;
- 采用云平台厂商提供的聊天服务,避免陷入不必要的细节,以及重复的非个性化开发。
因此,我们需要基于以下标准来选择云服务厂商:
- 能提供IM服务,有RTC服务更好;
- 不索取客户的用户信息;
- 有知名企业和知名项目背书;
- 能对抗网络攻击,遭受过大规模的网络攻击,且未失守的更好;
- 能处理高并发,有高并发客户案例的更好;
- 最后,最重要的:能白嫖!!!【企业账号改为:能长期免费使用!!!】
于是,基于以上标准,我们选择了云上曲率的IM即时通讯服务。
首先,云上曲率的IM即时通讯服务包含了RTC的功能,支持文本、音频,以及视频的一对一聊天,群组聊天、聊天室(房间)聊天,以及广播消息。同时还支持消息推送、文本审核、语音、图像、视频的审核,以及24种语言的手动或者自动翻译。这对于IM软件无论是国内,还是推向国际,都是至关重要的必备功能。
其次,云上曲率的IM即时通讯服务还不索取客户的用户信息,仅要求有唯一id代表即可。
然后,2021年初,云上曲率的客户曾遭遇DDoS攻击,期间有每秒超过25GB的攻击流量持续打到云上曲率的即时通讯服务,连续持续了2天半,而云上曲率的所有IM即时通讯和实时信令客户均未收到任何影响。
此外,FunPlus(趣加),使用了云上曲率的实时信令和IM即时通讯业务,成就了《阿瓦隆之王》和《火枪纪元》在海外SLG品类上的连续霸榜,并以此奠定了游戏大厂和中国出海品牌榜第11名(2019年)的地位。其中因全面使用IM即时通讯服务和实时信令,曾创造了单项目日消息量240亿条的记录,因此相信云上曲率的高并发能力是经过大厂的项目实际验证过的。
最后,云上曲率对于即时通讯服务是按照消息量计费,100万条1美元,先用后付!先用后付!!当月使用不足100万条不计费!不计费!!这也就意味着,对于创业初期的小团队来说,如果每个月消息量均不足100万条,则可以长期持续地免费使用!!!
基于以上的设计和选择,东风已到,万事皆备,那从下篇,我们就正式开始我们自己的IM系统开发!