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

XMPP协议之消息回执解决方案

于是也看到了别人的方案: 发送者发送消息给服务端 服务端接收到消息后发送回执给发送者 发送者确认收到则结束,如果未收到就重发 服务端将消息记录一下,并推送给接收者,等待接收者的回执 接收者接收消息并发回执给服务端...服务端接收回执删除掉消息回执记录,表示已经发送完毕 如果一定时间内没收到重新推送消息给客户端 接收者如果收到消息进行去重处理,如果不重复的执行第5-6步 这个流程基本就是完成了消息回执的功能,核心点就是在于发送者...基本的设计思路也有了: 客户端维护两个列表(发送回执队列和接收回执队列),用于保存发送/接收消息回执情况 服务端也维护一个列表,用于记录消息回执的接收与发送情况,服务端对列表进行超时检查,如果回执未发送的重发消息...,如果收到重复的消息则去重处理 客户端定期检查两个列表里的回执状态,如果未收到回执的要做重发处理,如果收到的是重复的回执则进行去重处理 方案差不多有了,只不过在检阅网上资料时有了新的发现。...柳暗花明 在看别人的总结时发现XMPP有扩展协议是支持消息回执功能的,就是XEP-0184.了解下来这个协议确实是一套消息回执的实现方法,但是呢。。

2.2K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    腾讯云短信通过反向代理接收回执信息方案

    方案背景 部分客户会在腾讯云短信配置回执URL(功能描述:短信下发给用户后,腾讯云短信服务可以通过回调业务 URL 的方式,通知业务方短信下发的状态),但是客户不希望直接把内部业务的机器配置成回执接收方...A机搭建短信回执接收接口 安装python环境(3.0+) wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3...conda -V conda deactivate conda create -n py39 python=3.9.2 conda activate py39 pip install flask 编写回执接收接口...腾讯云短信控制台配置回调地址 执行短信发送 参考:https://cloud.tencent.com/document/product/382/43196 结果记录 B机nginx日志内容: A机短信回执接收接口日志...结论 通过代理可以让内网的业务机器拿到短信下发状态回执信息,而且不会将内网业务机器信息暴露出去。

    3.3K40

    IM群聊消息的已读回执功能该怎么实现?

    6、已读回执流程的设计 前面的基础知识我们已经了解的差不多,本节来讨论本文的重点内容,即群聊已读回执流程到底该怎么设计。...消息回执表:用来记录消息的已读回执 msg_acks(sender_uid, msgid, recv_uid, gid,if_ack); 各字段的含义为:发送方UID,消息ID,回执方UID,群ID,回执标记...这里的初步结论是: 如果发送方在线:会实时被推送已读回执; 如果发送方不在线:会在下次在线时拉取已读回执。...答:回执数据不是核心数据 已读的消息,可以进行物理删除,而不是标记删除; 超过N长时间的回执,归档或者删除掉。...8、本文小结 对于群消息已读回执,一般来说: 如果发送方在线,会实时被推送已读回执; 如果发送方不在线,会在下次在线时拉取已读回执

    4.9K20

    记一次 websocket 实战,“我没有拿到回执呀”

    实战中需求是这样的: web 前端 A1 与后端 C1 建立 websocket,等后端 C2 推送给 C1 一个 callBack 消息后,C1 再将这个消息推回给 A1,最后 A1 拿到这个回执后渲染界面...; 额外说明:这个回执是由内嵌在 A1 iframe 里的 web 前端 A2 的用户输入的。...比如:在 A2 中用户输入传递给了 C2,然后 C2 把回执给了 C1,如果此时 websocket 是中断的,等待重连后,C1 是否还能把消息准确推给 A1?...C1 和 C2 之间需要有一个机制来记录,A1 是否准确收到了回执! 页面崩溃下的 websocket 断开如何处理?...“我没拿到回执呀”,websocket 因为网络环境断开的可能情况是什么?websocket 断开在不同浏览器下的表现是怎样的?......

    41120

    查找-散列查找

    散列技术既是一种存储方法,也是一种查找方法。...因此,散列主要是面向查找的存储结构。 散列结束最适合的求解问题是查找与给定值相等的记录。对于查找来说,简化了比较过程,效率就会大大提高。但散列技术不具备很多常规数据结构的能力。...如果相等,则查找成功;如果不相等,则到溢出表去进行顺序查找。...如果相对于基本表而言,有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的。 5.散列表查找实现 (1)散列表查找算法实现 首先是需要定义一个散列表结构以及一些相关的常数。...,对于无冲突的hash表而言,查找复杂度为O(1)(在查找之前需要构建相应的Hash表)。

    1.4K40

    查找算法之折半查找+分块查找

    基本概念 查找表:由同一种类型的数据元素(记录)组成 静态查找表:只需要查找算法 动态查找表:除了查找,还需要增删改查数据元素 关键字:唯一标识数据元素的数据项 常见的查找算法 折半查找 概念 折半查找又称二分查找...算法 //查找算法 int binary_search(seqlist L,Elemtype key) { int low,high=L.TableLen-1,mid; while(low<=high)...(LOW=HIGH)/2}向下取整,则对于任何一个节点,必有右子树结点数-左子树结点数=0或1 折半查找判定树必定是平衡二叉树 折半查找判定树中,只有最下面一层是不满的,因此元素个数为n时,树高h={log2...(n+1)}向下取整 失败结点:n+1(等于成功节点的空链域数量) 分块查找 分块查找,又称索引顺序查找,算法过程: 在索引表中确定待查记录所属的分块(可顺序,可折半) 在块中查找 若索引表中不包含目标关键字...,则折半查找索引表最终停在LOW>HIGH,要在LOW所指分块中查找

    1.6K30

    查找算法之顺序查找,折半查找,二叉查找

    查找表的概念   查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。   ...在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表。...顺序查找   顺序查找查找过程为:从表中的最后一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中第一个关键字查找完也没有成功匹配,则查找失败 同时,在程序中初始化创建查找表时...图 1 中监视哨的位置也可放在数据元素 6 的后面(这种情况下,整个查找的顺序应有逆向查找改为顺序查找)。   ...折半查找   折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。

    1.6K30

    查找-二分查找

    今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。 老规矩,我们还是来看一道思考题。...无处不在的二分思想 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。...O(logn) 惊人的查找速度 二分查找是一种非常高效的查找算法,高效到什么程度呢?我们来分析一下它的时间复杂度。我们假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。...其次,二分查找针对的是有序数据。 再次,数据量太小不适合二分查找。 最后,数据量太大也不适合二分查找。 解答开篇 二分查找的理论知识你应该已经掌握了。...实际上,求“值等于给定值”的二分查找确实不怎么会被用到,二分查找更适合用在“近似”查找问题,在这类问题上,二分查找的优势更加明显。

    92310

    查找-多路查找详解篇

    多路查找树 多路查找树(Multway Search Tree)是一种高级的树形数据结构,它 允许每个节点有多个子节点(通常大于等于2)。多路查找树的每个节点 可以存储多个关键字和对应的值。...分类 2-3树(2-3 Tree): 2-3树是一种最简单的多路查找树,每个节点可以存储1个或2个关键字, 并有2个或3个子节点。...B-树(B-tree): B-树是一种平衡的多路查找树,每个节点可以存储多个关键字,并有相 应数量的子节点。...Trie树(字典树或前缀树): Trie树是一种特殊的多路查找树,在处理字符串和前缀匹配的情况下非 常有用。...每种多路查找树在 平衡性、存储结构、查询性能等方面可能有所不同,选择合适的多路查 找树取决于应用需求和数据特点。

    21810

    查找

    查找的概念没什么好说的,但值得提的是查找分为内外查找。...查找分为三大类:线性表查找,树形查找,散列查找(又叫哈希表) 线性表查找 线性表查找主要有顺序查找,时间复杂度为o(n2),主要掌握折半查找(又叫二分),时间复杂度为nlog(n),因为之前学过二分查找...=-1) printf("R[%d]=%d\n",j,k); else printf("未找到%d\n",k); return 1; } 树形结构查找 树形结构查找主要是分为内查找和外查找,...内查找为二叉排序树(又叫搜索二叉树),同时也是动态查找(指在查找时,除了找到指定数,还能够对指定数进行删除等操作)但由于如果随机删除多次,会导致二叉排序树歪向一边,此时查找效率下降,于是有了平衡二叉树(...转载请注明原文链接:查找

    55330

    查找算法】折半查找

    本篇文章将介绍折半查找算法。 文章目录 何为折半查找? 算法实现 递归实现 效率分析 何为折半查找?...上一篇文章介绍了顺序查找算法,我们知道,虽然顺序查找算法适用性高,但效率太低,那么能不能在此基础上继续提高算法的效率呢?...这个时候,折半查找诞生了,它的原理是每次都将待查找的记录所在的区间缩小一半,比如: 若要在该序列中查找元素值4,折半查找是如何做到的呢?...它需要先设置两个游标,一个指向最左边,一个指向最右边: 这两个游标所表示的范围即为查找区间,初始我们在下标为1到10的区间内查找,这个查找也是讲究方法的,不是一个一个地去遍历查找

    1K20

    群消息已读回执(这个diao),究竟是推还是拉?

    二、已读回执流程 对于发送方发送的任何一条群消息,都需要知道,这条消息有多少人已读多少人未读,就需要一个基础表来记录这个关系。 消息回执表:用来记录消息的已读回执。...(如果发送方在线) 如果发送方不在线,ta会在下次登录的时候: (5)从关联表里拉取每条消息的已读回执 这里的初步结论是: 如果发送方在线,会实时被推送已读回执 如果发送方不在线,会在下次在线时拉取已读回执...答:已读回执更新不实时,最坏的情况下,1分钟才更新回执。当然,可以根据性能与产品体验来折衷配置这个轮询时间。 如何降低数据量?...答:回执数据不是核心数据 已读的消息,可以进行物理删除,而不是标记删除 超过N长时间的回执,归档或者删除掉 四、总结 对于群消息已读回执,一般来说: 如果发送方在线,会实时被推送已读回执 如果发送方不在线...,会在下次在线时拉取已读回执 如果要对进行优化,可以: 接收方累计收到N条群消息再批量ack 发送方轮询拉取已读回执 物理删除已读回执数据,定时删除或归档非核心历史数据 推送还是拉取?

    1.5K30
    领券