分享一套golang实现的 IM 系统,一键部署服务端,客户端SDK全平台支持,可以替代IM云服务

GO 聊天IM系统(三)整合redis、channel完成单聊私聊以及消息回调 整合redis完成im项目消息回调 阅读详情

开篇

自互联网诞生以来,即时通讯平台就一直存在。从世界范围来看,WhatsApp、Facebook、 微信、Telegram是领先的消息平台,用户主要使用这些平台与家人和朋友保持联系。随着互联网的发展,人与人之间的沟通是刚需,无处不在,几乎所有的APP都集成IM功能,从社交、游戏、到生活中的方方面面,打车、找房等。可以说IM作为一种通讯能力,已经成为互联网上的基础设施,成为许多APP不可或缺的功能。现在绝大多数APP使用IM云服务商的SDK,方便接入的同时,也带来了几个深层次的问题:(1)成本问题:企业每年额外支付上万乃至数十万的云服务费用,是个不小的成本;(2)数据隐私问题:企业的用户数据、聊天记录等核心数据存储在IM云服务商,如何保证数据的安全性是个极大挑战;(3)需求定制问题:IM需求多样化,IM功能只能由IM云服务商通过SDK的形式提供给大家使用,对于一些定制化的需求,是否支持,什么时候实现,都是个未知数;(4)云服务商绑架问题:一旦使用IM云服务,形成捆绑关系,迁移成本高,受制于人。

OpenIM采用和IM云服务相同的接口,提供服务端和客户端SDK,让开发者以免费或低成本接入IMSDK,并私有化部署,完成IM功能接入。

介绍

OpenIM:由前微信技术专家打造的基于 Go 实现的即时通讯(IM)项目,从服务端到客户端SDK开源即时通讯(IM)整体解决方案。开发文档完善,代码100%开源,支持Andorid、iOS原生开发,支持Flutter、uni-app跨端开发,支持小程序、React等所有主流web前端技术框架, PC支持Electron,可以轻松替代第三方IM云服务。

后台架构

img

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

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

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

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

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

消息流程

img

Open-IM 消息模型采用经典的收件箱模型,并通过全局 seq 做消息对齐,这里带来架构的简化,体现了简单美的架构设计理念。很多开发者通过网络文章,了解到收件箱模型的原理,也知道 seq 的概念,但如何在项目中做权衡和取舍,爱因斯坦曾经说过“事情应该力求简单,不过不能过于简单”,我们看到很多技术文章对收件箱模型和 seq 的滥用,要么系统设计复杂,要么过于简单,最后的结果是系统不稳定,消息可达率无法达到要求。以下我们简单讲解消息如何发送,系统如何简单解耦,接收方如何实时收到消息,并如何利用 seq 做全局消息对齐,确保消息百分百可达。

客户端架构

img

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

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

SDK集成流程

img

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

地址

官方文档地址:

https://doc.rentsoft.cn/

OpenIM github开源地址:

https://github.com/OpenIMSDK/Open-IM-Server

OpenIM官网 : https://www.rentsoft.cn

OpenIM官方论坛: https://forum.rentsoft.cn

我们致力于通过开源模式,为全球企业/开发者提供简单、易用、高效的IM服务和实时音视频通讯能力,帮助开发者降低项目的开发成本,并让开发者掌控业务的核心数据。

IM作为核心业务数据,安全的重要性毋庸置疑,OpenIM开源以及私有化部署让企业能更放心使用。

如今IM云服务商收费高企,如何让企业低成本、安全、可靠接入IM服务,是OpenIM的历史使命,也是我们前进的方向。

纯golang im即时通讯系统(支持分布式) 简介 纯go实现的im即时通讯系统,各层可单独部署,之间通过rpc通讯,支持集群,github地址 https://github.com/Terry-Ye/im, 学习于goim, 总分三层, comet(用户连接层),可以直接部署多个节点,每个节点保证serverId 唯一,在配置文件comet.toml logic(业务逻辑层),无状态,各层通过rpc通讯,容易扩展,支持http接口来接收消... 阅读详情

相关推荐

基于Golang的网站在线客服系统开发:实时通讯IM和访客生成唯一ID标识

通过实现实时通讯IM功能和为访客生成唯一的ID标识,我们可以构建一个简单而高效的网站客服系统。在本篇文章中,我们将介绍如何使用Golang开发一个网站在线客服系统,实现实时通讯IM功能,并为每个访客生成唯一的ID标识。上述代码创建了一个简单的聊天界面,包括一个消息显示区域、一个用户名输入框、一个消息输入框和一个发送按钮。你可以在不同的浏览器窗口中打开多个客户端,它们可以实时通讯,并在界面上显示收到的消息。在上面的代码中,我们创建了一个WebSocket服务器,使用。来生成一个唯一的ID标识,并将其存储在。

BetiFunction的博客 685

golang im聊天核心结构(websocket)

golang websocket实现im聊天

leo_jk的博客 1664

百万级并发IM即时消息系统(1)前期准备

Gin是目前golang使用最广泛的Web架构之一。web开发框架,通合api接口、微服务开发,相较于其他框架(iris、 beego)更轻量级和更好的性能。其路由功能很强大提供分组功能,非常适合做api开发。

m0_50973548的博客 733

Golang(M)[IM]

Go语言打造高并发web即时聊天(IM)应用-支持10万人同时在线

weixin_42366378的博客 3836

Go-im:使用Golang语言作为服务端实现IM聊天接口

Go-im实现 简单介绍 一个即时通讯服务器,基于WebSocket协议,使用Golang语言完成, 实现功能 登录注册 验证码 上传文件 单聊/群聊 文字、表情、图片、语音等消息推送 添加好友 创建群/加入群 七牛云对象存储 消息持久化 使用redis存储数据,减少数据库io操作 JWT-Token认证模式 日志记录 文字敏感信息过滤 使用说明 1、安装数据库 2、创建数据库 3、在config目录下,创建config.yaml文件进行数据配置 MySQL: Username: xxx Password: xxxx Address: xxx Port: xxx Database: xxxx QNY: #七牛云配置 QINIU_DOMAIN: xxx QINIU_ACCESS_KEY: xxxx QINIU_SECRET_KEY: xxxx QINIU_

golang实现高性能IM单聊系统,UDP分发

golang实现高性能IM单聊系统,UDP分发

「IM开源推荐」前微信技术专家打造,golang实现,一键部署,客户端SDK全平台支持,轻松替代IM云服务

背景 OpenIM成立之初就将“开源”作为核心战略来推进,开源充分体现了自由、平等、分享的互联网精神。 全球范围频繁发生的数据泄露、勒索病毒、隐私滥用等安全事件一次次给企业敲响警钟,企业管理者对数据资产的价值、数据安全的重要性有了更清晰的认识,数据安全成就企业核心价值。 IM作为核心业务数据,安全的重要性毋庸置疑,OpenIM开源以及私有化部署让企业能更放心使用。 如今IM云服务商收费高企,如何让企业低成本、安全、可靠接入IM服务,是OpenIM的历史使命,也是我们前进的方向。 优势 OpenIM:由前微信

OpenIM的博客 2450

MCP协议桥接AdsPower:AI原生时代的浏览器自动化新范式

浏览器自动化是Web开发和数据采集领域的核心技术,其核心原理是通过程序控制浏览器内核执行页面导航、元素交互和数据提取等操作。传统方案如Selenium和Playwright虽功能强大,但在管理多实例、指纹隔离等复杂场景下,配置和维护成本较高。随着AI原生应用的发展,Model Context Protocol(MCP)作为一种标准化协议,为AI助手与外部工具间的通信提供了统一接口,显著提升了自动化流程的构建效率和自然语言交互能力。通过MCP Server桥接AdsPower指纹浏览器的本地API,开发者可将

weixin_30552811的博客 295

# 稳了github star突破9k即时通讯IM开源项目OpenIM版本发布-生产环境重点关注

项目简介 Android体验地址:https://www.pgyer.com/OpenIM 注册后自动加入组织 群聊页面 工作台 业务可以通过jssdk自由扩展自身业务 工作圈 增加办公动态 组织架构 业务系统打通组织架构 最近一个月,OpenIM团队主要精力集中在线上bug修复、性能优化、新特性开发: 重大bug修复 | bug描述 | 描述 | 原因

OpenIM的博客 2009

Neo4j 智能供应链应用源代码简析

本文简析Neo4j智能供应链应用的源代码,让你也可以快速开发自己的供应链应用。

Neo4j 开发者博客 1679

Xilinx FPGA MultiBoot实战:7Series与UltraScale的SPI Fallback配置详解

本文深入解析了Xilinx FPGA的MultiBoot(多启动)与Fallback(回退)功能,针对7系列与UltraScale/UltraScale+系列,提供了从约束文件编写、看门狗集成到镜像烧录的完整实战配置指南。文章重点对比了两个系列在SPI Fallback配置上的关键差异与注意事项,旨在帮助工程师构建高可靠、永不宕机的FPGA系统。

weixin_29197051的博客 547

golang im实战入门

学了这篇文章,搞定im不成问题

qq_18447271的博客 1991

kbjdbc: autodetected server-encoding to be ISO-8859-1, if the message is not readable, please check

这条信息是来自 KingbaseES 数据库的一个 JDBC 客户端连接提示。KingbaseES 是一个企业级的关系型数据库管理系统,它兼容 PostgreSQL 的许多特性。如果上述步骤仍然无法解决问题,建议详细查看数据库和客户端的日志文件,以获取更具体的错误信息。此外,也可以考虑联系 KingbaseES 的技术支持获取帮助。项目融合kingbase数据库,输出日志乱码。结果:网上各种调整各种试。

zjy660358的专栏 4843

golang高可用IM即时通讯方案-协程发送、udp转发

2,请求示例,集成了udp转发,后端调度省略。

qq_37430469的博客 683

开源人形机器人硬件生态:关键技术、产业链与低成本突破 | OpenLoong 社区线下分享会

本文将深入探讨人形机器人硬件平台的关键技术、产业链与核心部件以及降低成本的策略。从硬件平台的核心技术,到机器人核心零部件的详细介绍,再到产业链各环节的协同发展以及实现低成本化的创新思路,将一同剖析人形机器人迈向广泛应用所面临的挑战与机遇,展望其未来的发展趋势,为开发者和相关从业者提供一些参考与启示。

OpenLoong_的博客 2419

手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真

本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。

MHD0815的博客 108

GoBelieve-国内唯一开源IM服务

GoBelieve-国内唯一开源IM服务 1. 一小时接入   专注IM,无冗余功能 几行代码,一小时接入 省时省力。 2. 自由定制   提供最新源码, 自行二次开发,业务协议 交互视觉均可根据业务需求 自由定制。 3. 完全开源   国内唯一开源IM服务,所有源码在Github开放,与线上版本一致 4. 私有云部署   彻底排除窃取隐私可能,支持自有域名部署可搭建私...

weixin_33814685的博客 417

【肝帝一周总结:全网最全最细】十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看!

文章目录前言一定要看python入门python缩进Python注释Python 变量1. 定义理解2. 变量名命名3. 分配多个值4. 输出变量5. 全局变量 前言一定要看 python能干什么?有什么用?好处在哪?不要我讲了,这不是我在博客该讲的,言简意赅就是:通俗易懂,上手快,实用强。我会根据自己个人理解以及国外官网翻译为中文对大家进行讲解。完整源码我也会在最下面带上地址。内容过多,我不会全部演示,你完全可以复制粘贴到自己的pycharm上运行即可。 不管是国内的菜鸟教程还是我在这里的翻译,至少你跟

全栈川川 5万+

IMV2.0

通过一个实例实时 IM系统简进行总结知识,在学习中,他的内容感觉很不错,可以去这里获取相应内容。刘丹冰 golang内容。

wtt234的专栏 393

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

推荐开源项目:GO-IM - 高性能即时通讯服务器

推荐开源项目:GO-IM - 高性能即时通讯服务器 go-im旧版本停止维护⚠️ 新版本地址:https://github.com/IM-Tools/Im-Services项目地址:https://gitcode.com/gh_mirrors/go/go-im 1、项目介绍 在当今数字化的时代,实时通信已经成为应用程序的核心组成部分。GO-IM 是一个基于 Golang 编写的高性能即时通讯(I...

gitblog_00006的博客 1728

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

推荐开源项目:基于golang+WebRTC构建的高效IM音视频聊天系统

推荐开源项目:基于golang+WebRTC构建的高效IM音视频聊天系统 去发现同类优质开源项目:https://gitcode.com/ 在这个数字化的时代,即时通讯(Instant Messaging, IM)已经成为了人们日常生活和工作中不可或缺的一部分。今天,我们向您推荐一款强大的开源IM音视频聊天系统,它采用了高性能的Golang语言和先进的WebRTC技术,为您打造稳定、高效的远程协作...

gitblog_00058的博客 1407

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

探索高性能即时通讯:GO-IM开源项目深度解析

探索高性能即时通讯:GO-IM开源项目深度解析 在数字化时代,即时通讯(IM)已成为连接人与人之间沟通的重要桥梁。今天,我们将深入探讨一个由Golang编写的高性能IM服务器项目——GO-IM,它以其卓越的性能和丰富的功能,正吸引着全球开发者的目光。 项目介绍 GO-IM是一个开源的即时通讯服务器项目,采用Golang语言开发,旨在提供一个高性能、可扩展的IM解决方案。该项目不仅支持账号密码登录,...

gitblog_00557的博客 697

golang 实现IM 通讯系统

首先需要了解websocket编程是什么?

m0_61287310的博客 312

Go: IM系统技术架构梳理 (2)

整个IM系统的一般架构如下我们这张图展示了整个IM系统的一般架构可见分为四层那最上面这一层是前端,包括哪些东西呢?它包括两部分,第一部分是跟用户直接交互的比如说各种IOS APP, 各种安卓 APP还有各种 web APP 在浏览器里面打开的以及windows上面跑的那种客户端第二部分是跟我们程序相关的SDK,API,Websocket这些我们都统称为前端第二个是接入层,这里展示了几种常用的接入协议实际上还会用到Mqtt, Xmpp 等各种协议这是接入层。

Wang的专栏 1896

GO-IM系统

https://github.com/alberliu/goim 是一个即时通讯服务器,代码全部使用golang完成,主要使用mysql (多设备,消息不丢不重) 官网https://goim.io/https://github.com/Terry-Ye/im纯go实现的分布式im即时通讯系统,各层可单独部署,之间通过rpc通讯,基于redis 做消息推送,比较适合做直播间消息。http://gglinux.com/2017/04/15/IM_design/IM系统设计。

牧竹子 2051
上一篇: 「IM开源推荐」前微信技术专家打造,golang实现,一键部署,客户端SDK全平台支持,轻松替代IM云服务
下一篇: 即时通讯(IM)开源项目OpenIM本周版本发布-v1.0.6
OpenIM
博客等级 码龄5年 295粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值