自己搞个聊天工具,爽!

Open-IM-Server是一个开源的即时通讯整体解决方案,提供服务端到客户端的SDK,支持多种消息类型、多端登录、好友管理等功能。项目包含Flutter、uniapp和安卓原生等平台的API,架构清晰,易于集成到现有项目,助你轻松创建具备聊天和社交功能的APP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c42bfe6825575fcce91e5a5df4873184.png

哈喽,大家好,我是开源君,一个资深的互联网玩家,致力于为大家分享各领域优质开源项目。

微信或 QQ 是我们大家很常用的聊天工具,其实还有很多即时通讯的地方,比如某宝的客服啥的。说起这个开源君想起一个故事。朋友小 C 有一次和女朋友吵架,结果女朋友把他微信,QQ 全删了,电话也拉黑了。为了哄女朋友,小 C 于是想起了自己还有女友的某付宝好友,于是就开启了某付宝哄女友模式...

而今天开源君给大家推荐的项目 Open-IM-Server,它是开源的即时通讯工具,从服务端到客户端 SDK 开源即时通讯(IM)整体解决方案,可以轻松替代第三方 IM 云服务,打造具备聊天、社交功能的 app。开源君体验了一下,做得有模有样,感觉挺不错,自己搭个 QQ 出来,做管理员,再也不怕被拉黑了,哈哈哈。

dadcc402c3ae79f34c924e1ea2478d5b.png

项目功能

这个项目含有多种功能:

  • 消息类型

消息类型备注
文本消息消息内容为普通文本
图片消息消息内容为图片 URL 地址、尺寸、图片大小等信息,包括原图、大图、缩略图
语音消息消息内容为语音文件的 URL 地址、时长、大小、格式等信息;
视频消息消息内容为视频文件的 URL 地址、时长、大小、格式等信息;
Tips 消息包括群通知,例如例如有成员进出群组,群的描述信息被修改,群成员的资料发生变化等;也包括好友资料修改通知;
文件消息消息内容为文件的 URL 地址、大小、格式等信息,格式不限
地理位置消息消息内容为地理位置标题、经度、纬度信息
自定义消息开发者任何自定义的消息类型
  • 多端登录

多端登录类型
只允许一端登录,Windows、Web、Android、iOS 彼此互踢
桌面 PC 与 Web 端互踢、移动 Android 和 iOS 端互踢、桌面与移动端可同时登录
各端均可以同时登录在线
  • 好友

功能功能描述
查找好友可通过用户帐号 ID 查找好友
申请添加好友要选择默认是否需要申请理由,目前是默认不需要
添加好友发送添加好友请求
删除好友成为好友后可以删除好友
获取所有好友获取所有好友的详细信息
同意/拒绝好友收到请求加好友请求的系统通知后,可以通过或者拒绝,处理后申请人能收到通知
添加用户到黑名单把用户拉黑,如果此前是好友关系不解除好友关系,通过字段来标识为黑名单
移除黑名单把用户从黑名单中移除

除此之外还有群聊,数据统计,用户资料,消息同步和漫游等等。

平台支持

项目提供了 Flutter,uniapp 和安卓原生以及 web 或者小程序的 API。同时也提供了服务端的 API 可以进行账号体系和后台的管理。可以比较轻松的将 SDK 集成到我们的项目中。

架构介绍

客户端

aed2374d55d95f95edcda2b800e95d51.png客户端 SDK 负责和 IM 服务端交互,本地数据存储和同步,消息、事件回调。开发者通过集成 SDK,自行开发聊天界面 UI,设置事件监听回调实现数据和 UI 对接。Open-IMSDK 分为三层:网络层、逻辑层、存储层。分层治理,各司其职,实现高效、稳定、统一的客户端架构。

(1)网络层:负责和服务端保持 websocket 连接、断网重连,接收消息推送,以确保在线时消息以及各种事件能实时达到。负责初始登录时、重连时数据补齐,通过对比本地 seq 和服务端最大 seq,同步拉取差值消息或事件,确保客户端和服务端达到最终一致的状态。

(2)逻辑层:针对主动调用接口和事件被动触发,对接网络层和存储层,实现业务细节,根据逻辑完成与 UI 之间的回调。比如发送消息,SDK 为 UI 提供发送消息及回调接口,逻辑层调用存储层存储本地消息,调用网络层发送消息,成功或失败回调 UI,并触发会话改变回调。同样接收消息或事件,网络层把消息或事件传给逻辑层,逻辑层根据消息或事件的类型做相应处理,比如存储本地消息,触发会话改变回调等。

(3)存储层:采用 sqlite 轻量级数据库,完成本地和服务端的数据同步,包括会话、消息、事件、通讯录、群组等,对外提供的数据 get 接口,通过本地数据库获取,实现了无网络情况下能查看消息等本地数据,同时也能有效缓解服务端的压力,达到了数据同步和缓存的双重目的。

服务端
58e0bf75918d31b4b65a37a6535d3118.png

服务端由接入层、逻辑层和存储层组成,好处在于各个层次能够依据业务特点专注于自己的事情,提高系统复用性,降低业务间的耦合。

(1)接入层:消息通过 websocket 协议接入,其他通过 http/https 协议接入,消息是高频及核心功能,通过双协议路由,体现了轻重分离的设计思想。

(2)逻辑层:通过 rpc 实现无状态逻辑服务,易于平行扩展,消息通过 MQ 解耦。

(3)存储层:redis 存储 token 和 seq;mongodb 存储离线消息,并定时删除 14 天(可自行配置)前数据;mysql 存储全量历史消息以及用户相关资料。数据分层存储,充分利用不同存储组件的特性。

(4)Etcd:服务注册和发现、以及分布式配置中心。

更多 Github 项目使用方式与玩法,点击下方卡片,回复 20211103 获取项目地址。

写在最后

欢迎加入开源指南读者交流群,聊天学习摸鱼为主,有一群有趣有料的小伙伴在等你哦!进群方式:开源指南 公众号 回复 666,按提示操作即可进群。

4fa65c6ff534ae95ed0df738e37598e3.png 25e3c207d0cf420c98449cb191ea1f68.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值