基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个由前微信技术专家打造的基于 Go 实现的即时通讯(IM)项目——OpenIM。

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个由前微信技术专家打造的基于 Go 实现的即时通讯(IM)项目——OpenIM。

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

Open-IM是由前微信技术专家打造的开源的即时通讯组件。Open-IM包括IM服务端和客户端SDK,实现了高性能、轻量级、易扩展等重要特性。开发者通过集成Open-IM组件,并私有化部署服务端,可以将即时通讯、实时网络能力快速集成到自身应用中,并确保业务数据的安全性和私密性。

Open-IM的优势

  • 开源永久免费:代码全部开源,永久免费,包括客户端和服务端,由前微信技术专家打造,并邀请全球技术极客参与建设。
  • 易扩展:服务端采用golang实现,首创“一切皆消息”的通讯模型,轻松实现自定义消息和扩展功能。
  • 专业技术服务:每个技术人员都承担技术客服的角色,强化社区,不提工单,及时解答。
  • 高性能:借鉴并优化通讯架构,抽象在线消息、离线消息、历史消息存储模型,分层治理架构,支持集群部署。
  • 安全:代码全部开源,服务端私有化部署,数据自我掌控。未来加入全球最安全的signal端到端加密协议。
  • 全平台支持:支持Andorid、iOS原生开发,支持Flutter、uni-app跨端开发,支持小程序、React等所有主流web前端技术框架, PC支持Electron,Flutter、iOS、uni-app已有成熟demo可以体验。开发者可以使用Open-IM替代市场上各种IM云服务,除了降低成本,还赋予开发者更多的灵活性和自主性。我们通过开源的方式,邀请全球技术极客来参与Open-IM建设,使每位开发者都能免费使用最优秀的IM组件,让每个app都具备即时通讯能力。

Open-IM包括哪些模块

  • 客户端

1. golang实现的跨平台的SDK

2. 在Open-IM-SDK-Core 基础上生成的iOS版本SDK

3. 在Open-IM-SDK-Core 基础上生成的Android版本SDK

4. 在Open-IM-SDK-iOS、Open-IM-SDK-Android生成的Flutter版本SDK

5. 在Open-IM-SDK-iOS、Open-IM-SDK-Android生成的uni-app版本SDK

6. 基于Open-IM-SDK-iOS开发的、供开发者参考的iOS Demo

7. 基于Open-IM-SDK-Android开发的Android Demo

8. 基于Open-IM-SDK-Flutter开发的Flutter Demo

9. 基于Open-IM-SDK-Uniapp开发的uni-app Demo

  • 服务端

1. 纯golang实现的服务端

2. docker镜像:open-im-server

  • 管理后台

包含统计报表、用户管理等运营管理系统:Open-IM-Admin

客户端界面

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

Open-IM主要功能

  • 多端登录

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 消息类型

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 消息功能

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 用户资料托管

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 用户关系托管

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 群组

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

  • 数据统计

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

服务端架构

整体架构

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

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

  • 接入层:消息通过 websocket 协议接入,其他通过 http/https 协议接入,消息是高频及核心功能,通过双协议路由,体现了轻重分离的设计思想。
  • 逻辑层:通过 rpc 实现无状态逻辑服务,易于平行扩展,消息通过 MQ 解耦。
  • 存储层:redis 存储 token 和 seq;mongodb 存储离线消息,并定时删除 14 天(可自行配置)前数据;mysql 存储全量历史消息以及用户相关资料。数据分层存储,充分利用不同存储组件的特性。
  • Etcd:服务注册和发现、以及分布式配置中心。

消息架构

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

Open-IM 消息模型采用经典的收件箱模型,并通过全局 seq 做消息对齐,这里带来架构的简化,体现了简单美的架构设计理念。

  • 绿色箭头表示用户 A 给 B 发送消息流程:用户 A 发送消息,msg_gateway 进行消息拆分,并落地 MQ,MQ 根据 userId 写入不同的 partition 后返回给 A 成功,消息发送流程结束。
  • 蓝色箭头表示 A 给 B 发送消息后,服务端给 B 推送消息流程:msg_transfer 通过 MQ 消费者监听消息达到,通过 redis 增加 userId 对应的 seq,并把 seq 和消息关联后写入 mongodb,并异步写入 mysql,前者用于离线消息存储,比如用户不在线或者推送失败时同步消息使用,后者主要做历史消息备份,用于管理后台或其他用途。写入成功后,再调用 pusher 推送,根据 B 所连接的 msg_gateway,进行消息推送(由于网络波动或者 B 不在线等原因,可能会推送失败)。
  • 粉色箭头表示 B 主动同步和服务端差量消息流程:客户端在任何有重连动作(包括重新登录、网络波动等)发生时,首先会获取自身在服务端最大的 seq,和本地 seq 做差值对比,把差值消息通过接口主动拉取到本地,这样完成了本地和服务端消息对齐。

消息发送、消息对齐等与服务器交互的逻辑,通过 Open-IM-SDK 的方式提供给大家使用,简化了开发流程。

客户端架构

客户端架构

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

客户端 SDK 负责和 IM 服务端交互,本地数据存储和同步,消息、事件回调。开发者通过集成 SDK,自行开发聊天界面 UI,设置事件监听回调实现数据和 UI 对接。

Open-IMSDK 分为三层:网络层、逻辑层、存储层。分层治理,各司其职,实现高效、稳定、统一的客户端架构。

  • 网络层:负责和服务端保持 websocket 连接、断网重连,接收消息推送,以确保在线时消息以及各种事件能实时达到。负责初始登录是、重连时数据补齐,通过对比本地 seq 和服务端最大 seq,同步拉取差值消息或事件,确保客户端和服务端达到最终一致的状态。
  • 逻辑层:针对主动调用接口和事件被动触发,对接网络层和存储层,实现业务细节,根据逻辑完成与 UI 之间的回调。比如发送消息,SDK 为 UI 提供发送消息及回调接口,逻辑层调用存储层存储本地消息,调用网络层发送消息,成功或失败回调 UI,并触发会话改变回调。同样接收消息或事件,网络层把消息或事件传给逻辑层,逻辑层根据消息或事件的类型做相应处理,比如存储本地消息,触发会话改变回调等。
  • 存储层:采用 sqlite 轻量级数据库,完成本地和服务端的数据同步,包括会话、消息、事件、通讯录、群组等,对外提供的数据 get 接口,通过本地数据库获取,实现了无网络情况下能查看消息等本地数据,同时也能有效缓解服务端的压力,达到了数据同步和缓存的双重目的。

SDK 集成流程

基于 Go 实现的即时通讯(IM)项目,提供多平台SDK

Open-IM SDK 集成非常简单,由于开发者私有化部署,代码、配置、数据都在自家服务器上,不用向云平台申请 AppKey 和 Secret,相比第三方 IM 云服务,可见 Open-IM 更安全、可控、自由度更高。

更多内容大家可自行前往阅读。

开源地址:https://github.com/OpenIMSDK

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88797.html

(0)

相关推荐

  • 詹克团退出比特大陆法定代表人

    新京报贝壳财经讯 企查查APP显示,近日,北京比特大陆科技有限公司发生工商变更,詹克团退出法定代表人,由周锋接任。

    科技 2021年11月7日
  • 众视通智能云巡检管理系统升级

    随着社会的发展与进步,企事业单位对安全管理要求越来越规范化。每年因玩忽职守、思想麻痹等人为不规范行为而造成的安全事故比例占80%以上,因此规范巡检制度流程,科学的巡检管理,对巡检人员进行有效的监督管理,无疑是消除各种安全隐患的有力措施。几乎所有的基础建设的行业都需要做设备的巡检,比如电力、化工、通信、物业、园区、学校、医院等,保证基础设备的正常运行,是所有巡检工作的重要内容。

    科技 2021年11月12日
  • 新能源汽车中概股上涨

    新能源汽车中概股上涨中证网讯(记者 胡雨)当地时间11月16日,在美上市中概股中的新能源汽车股上涨。截至收盘,理想汽车涨9.75%,每股报32.76美元,最新市值合计338亿美元;小鹏汽车涨5.28%,每股报50.01美元,最新市值合计428亿美元;蔚来涨0.22%,每股报40.66美元,最新市值合计647亿美元。

    科技 2021年11月17日
  • 女人生孩子晚的坏处有哪些,生孩子日子重要吗

    大杨和小杨是一对双胞胎姐妹,但随着时间推移,两人的相貌等各方面产生了巨大的差距。大杨四十岁结的婚,婚后一个儿子如今已经上了小学一年级。小杨二十八结婚,也有一个儿子,但孩子已经不用小王来管了。姐俩走在大街上,各种被误会,以为大杨是小杨的老妈。

    生活 2021年10月30日