如何快速开发一个IM系统? | 技术贴

作者 : 开心源码 本文共2483个字,预计阅读时间需要7分钟 发布时间: 2022-05-12 共135人阅读

云妹导读: 本文将会给大家详情如何开发一个简单的即时通讯系统(IM)。Timeline 模型是 TableStore团队针对消息数据场景所新创的一个数据模型,它的特色在于能够满足消息数据场景对消息保序、海量消息存储、实时同步的特殊需求。

为什么不简单

我们的站点加一个即时通讯(IM)的功能,那么我们怎样做?

在回家的路上,问了同是实习生(网络方向)的舍友这样一个问题,他答复:“很简单,只要要在服务端保存一个list,收到一个人的message后,我转发给list中指定的另一个人就好啦”

接着,我们探讨了一晚上下面的几个问题

对方不在线怎样办?

内存里保存list的话,人多了怎样办?

怎样查看历史记录?怎样多端同步数据?

为什么微信誉户只能建立有限个群,并且群聊功能很晚才开放?为什么微信好友数是有上线的?

怎样保证消息有序、不丢失数据?

如何保证消息的时效性?

如何承担高并发流量?

最后探讨的结果是:开发一个稳固高效的IM产品是相对困难的,上面这些难题,QQ、微信等产品都遇到过。而且IM产品一旦量达到肯定程度,性能、稳固性、可使用性等的挑战会越来越大,开发维护都十分困难,需要不断的打磨锤炼,才能保证是一个可靠稳固的IM产品。

为什么简单

同样是一个IM的小白,在看到 tableStore产品的 timeline模型后,只花了一个下午的时间,就了解了IM和做出一个可用的demo。

Timeline 模型是 TableStore 团队针对消息数据场景所新创的一个数据模型,它的特色在于能够满足消息数据场景对消息保序、海量消息存储、实时同步的特殊需求。目前 Timeline 模型主要能够处理以下场景的需求:

IM : 如钉钉、微信

Feed流:如微博、朋友圈

IOT消息下推:如天猫精灵

无限Topic的队列

具体的文章可以参考:

TableStore Timeline:轻松构建千万级IM和Feed流系统

资源链接:

https://yq.aliyun.com/articles/319138

TableStore数据模型 – WideColumn和Timeline

资源链接:

https://yq.aliyun.com/articles/620989

详情

接下来我们来完成这样的一个即时通讯产品的demo。正由于是一个demo,我们关注核心功能,所以在设计和其余功能上都会从简,方便大家了解和阅读。

1. 设计功能

一对一私聊

群聊

2. 表结构

目前版本的 timeline 只处理消息存储和同步问题,其余元数据相关的表还是需要我们自己来完成的。下面所有的表都用tableStore 这款NoSQL分布式数据库进行存储,存储量和并发不使用担心。

1.User 表

主要包含使用户相关的信息。尽管大部分信息在demo中并没有用。

2.Group 表

主要包括群组的信息。demo中实际上我们仅仅用了 groupName

3.groupUser 表

主要记录了一个群中包含哪些群成员,这样当收到一条群消息就知道了同步给哪些成员。在 tablestore中这样设计。

3. 工程结构

工程采使用springboot做的后台框架,前台使用了vue.js使用来简单展现数据,具体代码附件中。

4. 核心代码逻辑

工程上其实主要在用框架(springboot、vue.js),这里就不在逐个列举,下面主要详情timeline相关的少量用。而这些核心代码在官方的github仓库( aliyun/tablestore-timeline)的测试使用例里也有样例代码,不仅仅有IM相关的,还有朋友圈、微博这种feed流场景的样例代码,而我作为一个用者只要要拿过来直接使用就好啦,十分方便!

4.1 给指定好友发送消息

4.2 群发消息

4.3 元数据、消息内容搜索

IM产品经常需要搜索数据,其中主要包括:

使用户、群的元数据搜索

历史消息内容的搜索

这些功能将会在上线 ?TableStore 2.0的SearchIndex功能后一起发布,届时Timeline模型将原生支持强大的搜索能力,满足开发者不同的需求。

运行

大家可以尝试自己运行一下代码,很简单的几个步骤就把系统运行起来了。

1. 开通服务(免费)

tablestore有足够多的免费额度,可以做很多事情。我们去官网 https://www.aliyun.com/product/ots 开通实例,通过控制台创立一个实例

endpoint :?自己的实例的网址,相似

https://xxxxxx.cn-hangzhou.ots.aliyuncs.com

instanceName :自己的实例的名字,即上面网址的前缀

2. 获取AK

阿里云所有的服务几乎都是通过AccessKeyID 和AccessKeySecret来做鉴权的。我们点击使用户的如下按钮,按照提醒获取一个AccessKeyID 和AccessKeySecret。

3. 运行代码

下载指定分支代码

从附件中下载源码。

在源码中编译代码

linux下 ?./gradlew build ?

windows下: ? gradlew.bat build

提醒:网络不好时间可能会比较久,假如自己本机安装过gradle的话,也可以直接用 gradle build 来进行编译

启动项目

其中xxxx相关的要换成自己的阿里云实际的配置。

? ?4. 浏览器访问 http://localhost:8081/ 自己多开几个页面孤独聊天,或者者将地址发给好友一起体验!

感受

tableStore提供的timeline模型,把IM的开发变得如此简单,任何人都能够简单的用,在并发、容量、消息顺序等各种问题上都不使用担心。

简单的demo开发很容易,但是一个功能完善的IM产品开发,还是需要开发人员理解Timeline如何和其余组件一起用。Timeline仅仅是提供了IM产品的核心支持,作为一个企业级的IM产品支柱而存在。假如Timeline产品能提供补充IM产品的完整设计,那么相信更多的人会感觉IM易如反掌。

Demo的细节设计上目前都是从简的,仅为了体验Timeline模型。

理解更多

关注简书账号:阿里云科技快讯并私信小编接口暗号“Hello World”,云栖大会300份干货PPT属于你!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 如何快速开发一个IM系统? | 技术贴

发表回复