首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IM开发技术分享:浅谈IM系统中离线消息、历史消息的最佳实践

本文由融云技术团队原创分享,原题“IM 消息数据存储结构设计”,内容有修订。 1、引言 在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分。...像微信、钉钉、QQ等是典型的以 IM 为核心功能的社交产品。另外也有一些应用虽然IM功能不是核心,但IM能力也是其整个应用极其重要的组成部分,比如在线游戏、电商直播等应用。...3、IM消息投递的一般做法 在通常的IM消息系统中,对于实时消息、离线消息、历史消息大概都是下面这样的技术思路。...7、IM客户端的拉取消息逻辑 7.1 离线消息拉取逻辑 对于IM客户端而言,离线消息的获取针对的是自己的整个离线消息,包括所有的会话(直白了说,就是上线时拉取此次离线过程中的所有未收取的离线消息)。...上面的拉取逻辑,在IM界面功能上通常对应的是下拉或点击“加载更多”,比如这样: 8、本文小结 本文主要分享了IM中有关离线消息和历史消息的正确,主要包括离线消息和历史消息的区别,以及二者在存储、分发、

1.7K30

消息腾讯云即时通信IM支持IPv6啦!

举个例子:网聊的时候,表面上小红给小明发了一条消息。...为了让用户在使用即时通信IM(下文简称"IM")中能获得最佳的效果,腾讯IM的 iOS 和 Android系统现已支持 IPv6版本了!...介绍了这么多,正在使用IM的用户们赶紧来感受IPv6带给我们的非一般的体验吧! 登录腾讯云即时通信IM立刻升级体验! ?...腾讯云即时通信 IM 提供覆盖全球的高连通、高可靠、强安全的网络连接通道,自研多重最优寻址算法,具有全网调度能力,终端在海外登录时,IM SDK 会访问就近接入点或加速点,是全球化运营企业在通信云服务的最佳选择...截至目前,腾讯云即时通信 IM 能力已覆盖多个行业,让通信随心所想,触达全球。 ? 腾讯云通信 一直致力于 让每个企业 都享受智慧服务带来的改变 END 未来可期 ?

4.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

IM消息机制(二):保证离线消息的可靠投递

本文的上篇《IM消息机制(一):保证在线实时消息的可靠投递》中,我们讨论了在线实时消息的投递可以通过应用层的确认、发送方的超时重传、接收方的去重等手段来保证业务层面消息的不丢不重。...”(即B当前不在线) Step 3:服务器将此条消息以离线消息的形式持久化存储到DB中(当然,具体的持久化方案可由您IM的具体技术实现为准) Step 4:服务器返回用户A“发送成功”ACK确认包(注:...对于消息发送方而言,消息一旦落地存储至DB就认为是发送成功了) 关于 “Step 4” 的补充说明: 请一定要理解“Step 4”,因为现在无论是传统的PC端IM(类似QQ这样的——可以在UI上看到好友的在线...、离线状态)还是目前主流的移动端IM(强调的是用户全时在线——即你看不到好友到底在线还是离线,反正给你的假像就是这个好友“应该”是在线的),消息发送出去后,无论是对方实时在线收到还是对方不在线而被服务端离线存储了...),用于去重等场景,单机情况下此id可能是个自增值、分布式场景下可能是类似于UUID这样的东西 msg_id varchar(70), -- 消息发出时的时间戳(如果是个跨国IM,则此时间戳可能是

1.1K10

微博与im消息实现对比

feed系统 可以理解为一个发布订阅系统,你关注了姚晨的微博,姚晨发布了消息,会feed给你。 IM系统 即时通讯系统,典型系统为QQ。...实现方式 (1)推送 IM消息 就是一个典型的推送系统,服务端会主动将消息推送给客户端; IM消息 实时性比较强,而微博的实时性相对不这么强,别人发的信息,订阅者晚个几分钟,甚至十几分钟收到都无所谓;...IM群与微博 有共同点:一个人发布一条群消息,推送给群内的其他成员; IM群与微博 的不同点:群人数有限,而姚晨被500W人关注,消息扩散级别不在一个数量级; 如果使用推送来实现feed系统的话,姚晨发布一条消息...(2)拉取 IM系统消息(就是登陆QQ广告那种消息) 与微博 的共同点:系统消息需要推送给所有IM用户; IM系统消息 与微博 的不同点:系统消息频率很低,可能每天几条,可微博发送频率很高; IM系统消息的实现...微博压力和IM系统消息压力不在一个数量级: 不妨设微博同时在线为1000W(指在浏览微博网页的),平均每人在线时长为1小时,每天需要轮询次数为: 1000w * 60分钟 / 10分钟一次 = 6000w

1K70

微博与im消息实现对比

feed系统 可以理解为一个发布订阅系统,你关注了姚晨的微博,姚晨发布了消息,会feed给你。 IM系统 即时通讯系统,典型系统为QQ。...实现方式 (1)推送 IM消息 就是一个典型的推送系统,服务端会主动将消息推送给客户端; IM消息 实时性比较强,而微博的实时性相对不这么强,别人发的信息,订阅者晚个几分钟,甚至十几分钟收到都无所谓;...IM群与微博 有共同点:一个人发布一条群消息,推送给群内的其他成员; IM群与微博 的不同点:群人数有限,而姚晨被500W人关注,消息扩散级别不在一个数量级; 如果使用推送来实现feed系统的话,姚晨发布一条消息...(2)拉取 IM系统消息(就是登陆QQ广告那种消息) 与微博 的共同点:系统消息需要推送给所有IM用户; IM系统消息 与微博 的不同点:系统消息频率很低,可能每天几条,可微博发送频率很高; IM系统消息的实现...微博压力和IM系统消息压力不在一个数量级: 不妨设微博同时在线为1000W(指在浏览微博网页的),平均每人在线时长为1小时,每天需要轮询次数为: 1000w * 60分钟 / 10分钟一次 = 6000w

29921

IM消息机制(一):保证在线实时消息的可靠投递

本文将要讨论的是即时IM应用中极其重要但也不被用户感知的消息送达保证机制(即QoS机制),文中将给出目前主流的参考实现思路。 一、概述 消息的可靠性,即消息的不丢失和不重复,是IM系统中的一个难点。...报文类型 IM的客户端与服务器通过发送报文(也就是请求包)来完成消息的传递。...用户A给用户B发送一个“你好”,很容易想到,流程如下: client-A向im-server发送一个消息请求包,即msg:R im-server在成功处理后,回复client-A一个消息响应包,即msg...一个应用层即时通讯消息的可靠投递,共涉及6个报文,这就是im系统中消息投递的最核心技术(如果某个im系统不包含这6个报文,不要谈什么消息的可靠性)。...ack,群消息就没有这么简单了,群消息存在一个扩散系数,im消息的可靠投递问题感兴趣的可查阅相关资料。

1.9K21

【即时通信IM】红包消息如何构建?

作者:腾讯云-ahqzhang 红包消息的话,与@消息类似,可以通过 TIMCustomElem 来实现。需要应用在UI上做相应的特殊处理,比如检查到当前消息为红包消息后,消息展示为红包的样式。...另外,红包消息作为重要消息,最好在发送消息的时候将其设置为高优先级消息,以最大程序保证消息在触达频率限制的情况下仍可以送达(目前群内消息默认限制频率为40条/s, 单聊消息默认限制频率为10条/s)。...关于消息优先级相关的内容可以参考 消息优先级。 注:红包消息的支付部分功能,需要应用自行集成相应的支付SDK,ImSDK暂不提供这部分功能。...一个简单的红包消息的构建过程如下: //构建一条新的消息 TIMMessage msg = new TIMMessage(); try{ //填充自定义消息协议 JSONObject...; //根据自己定义的协议构建自定义消息元素 TIMCustomElem customElem = new TIMCustomElem(); customElem.setDesc

2.9K30

HBase存储IM消息,RowKey该怎么设计?

一般IM系统的消息,以会话为维度,按照TimeLine模型存储。...参看《基于TimeLine模型的消息同步机制》,《TimeLine模型下确保消息有序不丢》 以下是瓜子IM系统消息存储的RowKey设计 一、RowKey的格式设计 会话ID和消息ID采用snowflake...会话hash值的目的为数据分区(region)存储,预分区能够分摊数据读写压力; 会话id确定唯一会话,一个群里的所有消息拥有相同的会话id; 逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息...id值越小,IM软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息 “|”的作用在为分隔数据位。...二、region的分区设计 IM业务特点决定,同一会话的消息,一般会集中读取(用户查看某个聊天的消息就是这种场景)。因此需要把同一会话的消息存储在一个分区。

2.4K10

功能速递 | 全网首家,腾讯云即时通信 IM Web 端支持消息搜索啦!

腾讯云即时通信 IM 从更好地满足客户需求,更好地为客户服务的角度出发,经过一年时间的调研、立项、开发、内测,于近日正式上线了 Web 端消息搜索功能 - 云端搜索,是国内外首家提供此项能力的即时通信IM...其流程如下所示: 为了支持 Web 端消息搜索,腾讯云即时通信 IM 需要将应用的全量历史消息,和终端用户在应用内发送的实时消息导入消息搜索集群服务。...上述流程要求腾讯云即时通信 IM 部署大量的机器、带宽和存储资源,因此此功能并不包含在 IM 基础套餐包内,需要您额外付费购买。...Web 端消息搜索功能支持全局搜索、指定会话搜索、指定用户搜索、“或” / “与” 关系搜索,同时支持搜索文本、文件、自定义消息,支持中英文搜索。...搜索指定会话内所有文件消息 快来扫码免费体验吧~ 腾讯云即时通信Web-IM Demo 功能开通: https://console.cloud.tencent.com/im/plugin/TUICloudSearch

29920

IM系统海量消息数据是怎么存储的?

一、与消息相关的主要场景 1、存储和离线消息。 现在的IM系统,消息都要落地存储。这样如果接收消息的用户不在线,等他下次上线时,能获取到消息数据。...2、消息漫游 消息漫游包括主要两种场景, (1)用户新安装IM软件,要能看到以前的聊天记录 (2)聊天软件有PC版和App版,在App上聊的天,打开PC版要能够看到 二、不同场景读取 消息关键点 1、拉取离线消息...离线消息包括单聊、群聊、控制类等消息消息类型类型众多。因此离线消息需要以用户ID(多端情况下需要以端)为检索维度。...三、存储消息关键点 1、离线消息 离线消息读取频繁(写也有一定压力),但是检索逻辑简单(参看《一个海量在线用户即时通讯系统(IM)的完整设计》拉取离线消息章节)。...离线消息读取策略参看《一个海量在线用户即时通讯系统(IM)的完整设计》拉取离线消息章节。理论上读取离线消息的时间复杂度为O(log(N)+M), N 为离线消息的条数, M 为一次读取消息的条数。

6.7K10

IM系统服务端消息加解密方案

IM系统中信息可能涉及隐私或秘密,安全显得尤为重要,怎么确保信息的安全呢? 端到端加密是最安全的,只有聊天双方知道具体是什么消息,传输链路和消息服务器端都不知道消息内容。...如果不采用端到端加密,消息的加密就分为网咯传输加密和服务端存储加密两部分。 传输过程,tcp长连接可以采用ssl协议(当然也可以自己实现加密《为什么相同的消息微信每次加密后发送的内容都不一样?》)...难点变成了消息在服务端测的安全问题。消息在服务器端的路由过程怎么加密, 存储怎么加密? IM系统后台逻辑很复杂,涉及众多模块,中间还有消息总线、缓存、数据库等中间件。...每个环节消息都需要以密文形式呈现,否则很容易泄漏。 第一反应是简单写个加密算法如AES对数据进行加密解密就搞定了。但是这样存在一个非常大的隐患。密码怎么保存? 日防夜防,家贼难防。

1.6K10

Swoole - webSocket客服IM消息系统方案实践篇

概述基于Swoole的websocket服务,再之前的消息系统系列的第4篇,实现了更加复杂的业务场景,是对消息推送的完善和优化,代码本身就是不断自我优化的过程。...实现方案技术的实现方案点主要PMQ,2组客户端(用户端、客服管理端),3个主要的部分组成(Push推送消息+Pull拉取未读消息+MessageQueue消息队列),具体流程和交互方式见上面的架构流程图...'PUSH_CUSTOMER_MSG_SOCKET_FD', $fd); } }, 'redis'); }); }}5.获取离线消息分配算法...,按照客服管理员在线人数,把离线消息按照用户来重新组装,平均分配给在线管理员,如果数量不能被整除,也不会造成分配不均情况。...7.心跳:客服的websocket心跳使用的是实时push消息,5s循环一次,防止链接断开,服务下线。

3.7K41

IM开发干货分享:万字长文,详解IM消息“列表卡顿优化实践

以下就是几款主流的IM应用(看首页就知道是哪款,我就不废话了): 正如上图所示,这些IM的首页(也就是“消息”列表界面)对于用户来说每次打开应用必见的。...IM客户端优化相关文章: 《IM开发干货分享:我是如何解决大量离线消息导致客户端卡顿的》 《IM开发干货分享:网易云信IM客户端的聊天消息全文检索技术实践》 《融云技术分享:融云安卓端IM产品的网络链路保活技术实践...》 《阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践》 融云技术团队分享的其它文章: 《融云IM技术分享:万人群聊消息投递方案的思考和实践》 《融云技术分享:全面揭秘亿级IM消息的可靠投递机制...》 《IM消息ID技术专题(三):解密融云IM产品的聊天消息ID生成策略》 《即时通讯云融云CTO的创业经验分享:技术创业,你真的准备好了?》...为了更快地定位主线程方法耗时,可以使用滴滴的 Dokit 或者腾讯的 Matrix 进行慢函数定位。

1.5K20

IM系列」WebSocket教程:消息持久化实现与应用

消息持久化 本次采用服务器端消息持久化,当服务器接收到WebSocket消息时,可以将消息保存到数据库或其他持久化存储中。这样,即使客户端断开连接,服务器仍然可以在需要时检索和处理这些消息。...注意:WebSocket消息持久化的具体实现方式取决于你的应用场景和需求。你可以根据自己的情况选择适合的方法来实现WebSocket消息的持久化。...、最后一条消息的发送时间。...NOT NULL AUTO_INCREMENT COMMENT '自动递增', `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID(存储个人登录IM...源码 上一教程章节:「IM系列」WebSocket教程:私聊和群聊实现 文章相关源码地址:https://github.com/Tinywan/webman-admin

36910

自定义消息收发

原文链接:http://blog.csdn.net/humanking7/article/details/51035974 ---- 最近由于项目要用到C#,所以最近学了一下C#,其中别人的代码里面用了 自定义消息...---- 发送消息 我自己写了一个类,专门用来进行类之间的消息传递 源代码 using System; using System.Collections.Generic; using System.Linq...MsgGenerator.PostMsg2All((MSG.WM_USER + 1), 90, 8000); 接收消息 接收消息要重写 DefWndProc() 函数,而且要注意不要干扰其他消息的响应...break; } } 其中这个 MSG.WM_USER 也是我自定义的一个类,代码如下 namespace WindowsFormsApplication1 { public class...MSG { public const int WM_USER = 0x0400;//自定义消息 } } 解释 我的接收到我自定义消息后,我就让窗口在Label控件上显示收到的消息以及对应的时间

55720

消息队列-腾讯消息队列 CKafka

腾讯消息队列 CKafka,分布式、高吞吐量、高可扩展性的消息服务,100%兼容开源 Apache Kafka 0.9 0.10 腾讯消息队列 CKafka点击查看详情 消息队列 CKafka 简介...消息队列 CKafka(Cloud Kafka)是一个分布式、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API(0.9、0.10版本)。...腾讯消息队列 CKafka 的特性 兼容开源 100% 兼容 Apache Kafka 0.9 0.10版本,迁移上云0成本。...高可靠 消息队列 CKafka 集群性能强劲,生产性超越开源方案;此外,消息队列 CKafka 分布式的部署,集群稳定性也有很好的保障。...统一运维监控 提供腾讯云平台整套的运维服务,包括租户隔离、权限控制、消息堆积查询、消费者详情查看等多维度监控告警等运维服务。

5.9K60

得物客服IM消息通信SDK自研之路

随着公司业务的快速发展,客服对IM聊天的性能和体验都有了更高的要求,第三方SDK消息通信逐渐遇到了瓶颈,为解决第三方SDK接入带来的潜在隐患、提升IM的稳定性和高扩展性,自研一套可控、稳定、灵活的IM系统已是无法避开的一条道路了...JS脚本执行,举个客服与用户聊天的例子:客服发送了“客服小冰为您服务”这个文案,通过业务侧调用SDK的接口,传入到SDK里,SDK会先创建消息体,即把这个字符串封装成一个自定义的结构体model;再将该数据存储到数据池中...2.5.3 消息的可靠传递IM消息的可靠投递主要是指:消息在发送接收过程中,能够做到不丢消息消息不重复、消息顺序不错乱。...我们先来分析以下2种情况:第一种:如果客服A在把消息发送到IM网关的过程中,由于网络不通等原因失败了;或者IM网关接收到消息进行存储时失败了;或者IM网关一直没有返回结果,导致超时,这些情况客服A都会被提示消息发送失败...第二种:消息IM网关存储完后,客服A被告知消息发送成功了,然后IM网关把消息推送给用户A的在线设备。在推送的准备阶段或者把消息写入到内存后,如果服务端出现掉电,也会导致消息不能成功推送给用户A。

1.1K90
领券