IM的群组消息同步具体设计

上一篇Blog我提到过,每一个Channel都有一个自己的leveldb做缓存。同时,有位朋友建议我不要用缓存,经过思考后,我依然决定使用缓存。我为什么要这么做呢。

如上面图的场景,一个Sender,两个Reciver。其中一个Reciver是一个一直在线的用户,而另一个Reciver是一个因为某种原因离线了一小段的用。在途中Channel中的K为键而V为数据。

我们可以按照2个主要情况分析:

  1. Reciver是暂时离线有同步Key。
  2. Reciver全新加入一个Channel无同步Key。

对于第一种情况:

我们可以快速的将用户同步到K:SeqN-1处,如果Sender在这个时候发送数据,那么这个用户用K:SeqN-1再次同步Channel消息的时候就会发现K:SeqN的存在。

对于第二种情况:

按照小时切分数据,我们很容易计算出当前小时区间,同时我们知道小时队列中有多少数据。我们可以快速的给出最后N-1条数据,并将用户同步到K:SeqN-1。如果用户要翻看前面的历史,我们同样可以使用K:Seq1向前同步。

那么这么做的好处是什么,就是所有群组中的用户看到的消息顺序是一致的,而非像QQ群组那样,偶尔出现,某个人和群组中所有人的消息顺序不一致的问题。

模型简单实现https://github.com/DavidAlphaFox/mm_channel

时间: 2024-10-29 19:08:24

IM的群组消息同步具体设计的相关文章

nodejs之socket.io 私发消息和选择群组发消息

写在前面:其实有的时候忙碌是好的,比如忙碌起来的自己手机可以一天耗费掉只有20%的电,忙碌的自己很专心于一件事情,但是忙碌不等于过度疲劳,本周忙碌有点上脑,迷糊了一天,都在补觉,还是要去平衡下自己一天中忙碌的时数,累了就休息下,保持一个健康的身体. 今日正题:socketio实现私发消息和群组发消息(不是很困难,一搜一大片,但还是记录下来总结) 基础连接部分在上一篇:https://www.cnblogs.com/mfyngu/p/10780737.html 1.私发消息实现 实现思路:私发消息

做一个群组聊天页面

要做个群组聊天的页面,参考微信的web版本,大致就是分为左右两列,左边是群组列表,右边是群组中的对话 示例图如下: 这个页面风格是使用ACE做的,再次啧啧下,ACE真TMD强大,这个页面的风格很招人喜欢. 做这个页面刚开始的时候我走了弯路,初步想的是使用iframe,左侧群组聊天页面是页面加载的,右侧的群组对话框是个iframe.然后点击左侧的任意一个群组,右侧的对话iframe就修改src,然后更新对话的时候也超简单,直接iframe重新加载一下就ok了. 但是呢,后来发现,我这样需要写的co

消息系统的设计

简介: 例图: 数据库设计: 服务层设计: 新建一条公告 新建一条私信 新建一条群组消息 新建一条全员消息 获取用户未读消息数 获取用户消息列表 实时获取用户消息 发送短信 发送邮件 简介: 消息系统主要分为了两种 ① 站内信 公告,私信(运营到用户),群组通信,全员信息 ② 站外信 短信,邮件,微信提醒 例图: 数据库设计: 一.消息信息表 create table `news` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '

如何同步更新保存百度云盘群组文件库好友文件库资源

百度网盘好友分享的文件在哪  如何查看别人网盘的文件  百度云盘好友 百度云文件怎么发给别人  百度网盘怎么把文件发给别人  百度云好友分享怎么保存 百度云盘如何转发文件到邮箱  百度网盘怎么发文件给别人  百度网盘怎么加好友 应用场景:加入了别人的百度网盘群组中,想将里面的文件库资源都保存到自己的网盘内或者自己的群组中,同时文件库中的文件.文件夹有更新时能够及时自动保存到自己的网盘中,这该用什么方法能够快速处理呢? 一.下载运行百度网盘批量处理软件 首先需要借用到工具,百度网盘批量处理软件,下

使用Python创建自定义机器人向群组人员发送消息

创建机器人 打开需要创建机器人的群组,点击 群组机器 人的图标 点击 + 号键创建机器人 点击 自定义 创建自定义机器人 点击 添加 设置机器人头像,机器人名称,机器人属组,点击下一步 复制API(webhook),点击完成 编写Python脚本 注意:修改脚本内requrl的值为机器人的webhook地址 脚本使用说明: 使用方法:脚本后面跟要发送的消息 at所有人将 isAtAll 的值改为True at指定人在 atMobiles 列表定义被at人的手机,列表形式 requrl的值为机器人

聊天源码IM聊天室模板 群组聊天app 即时通讯IM设计聊天

(此贴长期有效)系统提供多种方式合作,支持源码转让/支持按年整体运维合作/支持行业定制开发,更多需求请联系我们 团队Tel:15538001716 (V同) 独立IM:个性化定制,私有化部署,全功能,高并发,快速拥有自己的微信.QQ或陌陌. I M+模块:Web.H5.App.小程序,简单几步实现消息.动态.点赞评论,变身社交+电商.资讯.游戏.支付.区块链-- 独立部署!加密通道!牢牢掌握通讯信息! 后台源码采用Java开发,maven环境Nettty框架.本地MySQL,MangoDB数据库

利用邓西百度网盘消息群发工具对百度网盘的群组、好友进行管理,批量分享文件

做百度网盘营销的小伙伴经常需要对百度网盘的群组.好友进行管理,但是百度网盘APP或者网页版里面对于这方面的功能太弱了,下面介绍如何利用工具对百度网盘群组.好友进行集中管理,并批量分享文件. 一,下载邓西百度网盘消息群发工具“https://pan.baidu.com/s/13yPBCs9Et_tQ9HVVCu5b2A” 二,运行程序后,添加帐号并登录,如图: ? 三.百度网盘好友管理(好友选项卡),可以查找好友,筛选单向,双向好友. 1.消息群发(仅支持百度网盘双向好友,可批量分享文件,发送消息

融云群组同步策略

查询群成员方法https://www.rongcloud.cn/docs/server.html#group_user_query https://www.rongcloud.cn/docs/server.html#group_quit退出群组方法 https://www.rongcloud.cn/docs/server.html#group_join加入群组方法 触发机制:手机端进入单位群组.班级群组.自定义群组前,向服务器申请接口,待服务返回OK后,再进入群组聊天. 原理:1.由手机端将群组

H5+MUI+Node.js+Socket.io群组即时聊天+发送图片+图片压缩

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title