欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

手把手教你开发简单的即时通讯系统(IM)

时间:2022-08-27 22:37:40 | 浏览:802

本文将会给大家介绍如何开发一个简单的即时通讯系统(IM)。为什么不简单我们的站点加一个即时通讯(IM)的功能,那么我们怎么做?在回家的路上,问了同是实习生(网络方向)的舍友这样一个问题,他回答:“很简单,只需要在服务端保存一个list,收到

本文将会给大家介绍如何开发一个简单的即时通讯系统(IM)。

为什么不简单

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

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

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

  1. 对方不在线怎么办?

  2. 内存里保存list的话,人多了怎么办?

  3. 怎么查看历史记录?怎么多端同步数据?

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

  5. 怎么保证消息有序、不丢失数据?

  6. 如何保证消息的时效性?

  7. 如何承担高并发流量?

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

为什么简单

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

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

  1. IM : 如钉钉、微信

  2. Feed流:如微博、朋友圈

  3. IOT消息下推:如天猫精灵

  4. 无限Topic的队列

具体的文章可以参考:

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

  • TableStore数据模型 - WideColumn和Timeline

介绍

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

1. 设计功能

  • 一对一私聊

  • 群聊

2. 表结构

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

1.User 表

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

private String userName; //用户名,为了简化,我们使用userName作为id,在tablestore中作为pk

private int age; //年龄

private String gender; //性别

private String sign; //个性签名

2.Group 表

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

private String groupName; //群名,为了简化,我们使用groupName作为id,在tablestore中作为pk

private String groupType; //群标签,群类别

private String groupDescription; //群描述

3.groupUser 表

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

主键(pk)类型
groupNameStringuserNameString

3. 工程结构

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

4. 核心代码逻辑

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

4.1 给指定好友发送消息

/**

* 发送个人消息

*/

public void sendPersonalMessage(String userNameFrom, String userNameTo, IMessage message) {

//创建发送方的timeline

Timeline sender = new Timeline(userNameFrom, store);

//存储消息:发送者存到自己的发件箱

sender.store(message);

//创建接收者的timeline

Timeline receiver = new Timeline(userNameTo, sync);

//同步消息:存到接收者的收件箱

receiver.store(message);

logger.debug("【" + userNameFrom + "】send Message to 【" + userNameTo + "】");

}

4.2 群发消息

/**

* 发送群组消息

*/

public void sendGroupMessage(String groupName, IMessage message) {

//获取该群组所有的人员列表

List<String> groupMembers = userAndGroupService.listGroupMembers(groupName);

logger.debug("Begin send Message to " + groupMembers.size() + " members");

//存储消息:存到自己的发件箱

Timeline sender = new Timeline(groupName, store);

sender.store(message);

//同步消息:给群里的所有人发一份,

for (String user : groupMembers) {

Timeline receiver = new Timeline(user, sync);

receiver.store(message);

}

logger.debug("End send Message to " + groupMembers.size() + " members");

}

4.3 元数据、消息内容搜索

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

  1. 用户、群的元数据搜索

  2. 历史消息内容的搜索

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

运行

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

1. 开通服务(免费)

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

  1. endpoint : 自己的实例的网址,类似 https://xxxxxx.cn-hangzhou.ots.aliyuncs.com

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

2. 获取AK

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

3. 运行代码

  1. 下载指定分支代码

  2. 从附件中下载源码。

  3. 在源码中编译代码

  4. linux下 ./gradlew build

  5. windows下: gradlew.bat build

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

  7. 启动项目

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

  9. java -jar build/libs/im-demo.jar

  10. --aliyun.tablestore.endpoint="xxxxx"

  11. --aliyun.tablestore.AccessKeyID="xxxxx"

  12. --aliyun.tablestore.AccessKeySecret="xxxxx"

  13. --aliyun.tablestore.instanceName="xxxxx"

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

感受

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

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

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

相关资讯

数字藏品系统开发怎么制作?NFT数字藏品系统开发说明功能

一、什么是数字藏品什么是所谓的数字藏品,其实就是指使用区块链技术,将一些作品、艺术品生成相对应的数字凭证,不仅可以保护版权,还能实现数字化发行、购买、收藏和使用,具有可追溯、难以篡改、唯一性等特点。二、数字藏品的特点数字藏品有四个特点,第一

NFT系统开发公司带你了解NFT系统开发

  NFT市场目前如火如荼,各大互联网公司纷纷推出自己的NFT系统,都准备抓住这个机会。 NFT平台分为两种模式基于联盟链的开发和基于公链的开发。  一、基于联盟链开发  联盟链是国内互联网巨头推出的区块链底层技术,保证数据的真实性、唯yi

三问直播系统开发:如何开发?找谁开发?以后如何发展?

目前,直播行业的发展趋于稳定,互联网的红利并不比原来的红利,所有直播的受欢迎程度都在降温。随着直播技术的发展,直播系统的发展越来越成熟,使直播系统的发展越来越接近人们。那么,如何开发一个直播系统呢?你能找到谁来开发它呢?如何开发现场直播系统

想开发一个红洞数藏网站系统的网站系统你怎么能错过这些

  红洞数字藏品平台(简称红洞数藏)是一个区块链数字收藏电子商务平台,红洞数藏网站系统提供IP内容数字资产发行、销售等配套服务。 于2021年12月5日在2021中国元宇宙峰会上正式发布。红洞数藏网站系统是新的数字藏品在线交易平台,在这里浏

操作系统开发有多难?中国为何还没有可媲美Windows的操作系统?

操作系统开发到底难在哪里呢?现在市场还是Windows、安卓、iOS三分天下。操作系统按应用领域可分为:桌面操作系统移动端/手机操作系统服务器操作系统和云嵌入式、物联网操作系统等其他设备操作系统目前,桌面操作系统方面,Windows、Mac

信息系统—系统开发路线、方法与工具

信息系统—系统开发路线、方法与工具.m4a1:36来自LearningYard学苑—系统开发路线、方法与工具—信息系统Information system“系统开发的路径:系统开发目标—开发路线—开发方式—具体开发方式—开发工具和技术Pat

信息系统项目管理师必背核心考点(二)信息系统开发方法

科科过《每天一小时 俩月拿证》为您带来软考信息系统项目管理师核心重点考点(二):信息系统开发方法,内含思维导图+真题。【信息系统项目管理师核心考点】信息系统开发方法1.结构化方法特点:目标清晰化【工作阶段化】,文档规范化,设计方法结构化缺点

智能垃圾分类系统|垃圾分类系统开发|垃圾分类科普软件

有数据表明现在垃圾中占比大的就是生活垃圾,只要在这个环节中处理好垃圾分类的话就能大大减少垃圾的污染和资源的浪费,垃圾对于我们来说就是不需要的东西都能归类为垃圾,但是其中垃圾中还是有很多有用的东西,只要合理的区分一下就能变废为宝,这就是垃圾分

固定资产管理系统开发流程(固定资产管理系统业务处理流程)

  对大多数中小企业来说,订购固定资产管理软件的预算是有限的。标准软件不能满足企业的需求,独立开发软件太贵了。因而,在这样的情况下,选择基于成熟架构的个性定制开发是一种具有成本效益的方式。  因而,不可避免地要寻找简单、高效的管理手段。在充

数字藏品系统开发搭建(系统搭建、部署源码)

数字藏品,从文化角度来说,它是一种科技赋能与文化IP巧妙融合的产物,将文化收藏品数字化并完成上链,成为一种独特的存在。能够对其进行标记生成唯一数字凭证,有效保护发行者版权和消费者权益。从技术角度来说,数字藏品是在合规管理架构下,对NFT技术

攻城狮们,大型系统开发过程中会面临哪些系统工程管理挑战呢?

ISO / IEC / IEEE 15288:2015 Systems and software engineering — System life cycle processes该标准建立了一个通用过程框架,用于描述采用系统工程方法构建的

NFT数字藏品系统开发作为中小企业该如何部署自己的系统

  2021年以来,NFT市场迅速扩张。 交易量方面,2021 年 NFT 市场总交易量将达到 4336 万笔,比上年增长 40 倍以上; 单月最高交易量为592万笔,比上年增长39倍。 从成交均价来看,2021年月均成交价为365美元/件

数字藏品APP系统开发|数字藏品系统

数字收藏是应用区块链技术对数字作品、艺术品和商品的所有权进行识别。数字收藏品可以在区块链网络中标记其所有者,并追踪其后续流通情况,包括但不限于数字图片、音乐、视频、电子门票、数字纪念品等方式。简单来说,数字收藏APP系统的开发就是通过区块链

软件开发和系统开发的区别

经常有人问起软件开发和系统开发的区别,今天我们来描述一下二者的区别。软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常

一对一系统开发——一对一源码开发

一对一视频,字如其义,一对一视频能更好地保护观众们的隐私,如今任何东西都公开化的年代中,后期伴随着直播间的戏份又新增了一对一视频,计时房间,游戏,购物链接等等功能,还有直播间+短视频模式,社区公会的增加等功能。从这些方面来看,直播间的功能早

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈迈克尔·乔丹球迷网德夯苗寨旅游攻略太姥山旅游攻略丽家宝贝母婴文淇影迷网丽江古城旅游网南京交友相亲网飞鹤奶粉评测网桂林交友婚恋网来宾新闻资讯网长虹电视评测网零跑汽车港股行情松鼠Ai资讯网石油期货行情网马基高球杆
数字藏品系统开发网是目前国内领先的数字艺术品、nft、元宇宙、数字藏品、nft开发、数字藏品平台、数字藏品平台建设、数字藏品平台开发、nft平台开发数字收藏品交易业务、NFT艺术品交易业务专用系统平台,为品牌提供一站式建设数字藏品平台服务,拥有丰富的数藏平台建设与运营经验。
数字藏品系统开发 hezua.cn ©2022-2028版权所有