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

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

二、思考客服与用户聊天过程,直观上是客服输入文案,然后通过网络发送给用户,但是SDK该如何设计才能使客服发送消息过程感知不到卡顿,这一点是非常关键,要避免卡顿就要设计合理发送策略以及避免大量...其实现大致如下:2.5.1 发送消息链路分析针对客服发送消息,我们首先要站在客服角度考虑消息是否已发出去,优先展示聊天页面,而不是等网关给了回复后展示到聊天页面,根据已往经验来看,只要回车消息就要立即展示到聊天页面...解决方案是:发送发送消息时携带一个msgid,msgid是全局唯一,针对同一条重推消息msgid不变,接收方根据这个唯一msgid进行去重,这样经过去重后,对于A来说,聊天界面是不会看到重复消息...客服端和用户端接收到发送消息回执时需要根据返回seqid(IM网关自增)进行消息排序,这种方式可取。...这里列举一个简单案例吧,例如消息发送:需要考虑到断网场景下该如何进行消息显示、排序、重新发送发送失败场景下重新发送再次失败后又该如何显示、排序

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

得物从0到1自研客服IM系统技术实践之路

二、业务场景 客服与用户聊天过程,直观上就是客服输入文案,然后通过网络发送给用户。 但是IM聊天SDK该如何设计才能使客服发送消息过程感知不到卡顿?...上述图中有个虚拟seq:主要是为了未收到IM网关响应之前进行排序,比如图片、视频、断网发送消息消息发送失败,或收到IM网关回复缺少seq(场景:敏感词)等情况都需要通过虚拟seq进行准确排序。...解决方案是:发送发送消息时携带一个msgid,msgid是全局唯一,针对同一条重推消息msgid不变,接收方根据这个唯一msgid进行去重,这样经过去重后,对于A来说,聊天界面是不会看到重复消息...seqid,客服端和用户端接收到发送消息回执时需要根据返回seqid(IM网关自增)进行消息排序,这种方式可取。...例如消息发送,需要考虑到断网场景下: 1)该如何进行消息显示、排序、重新发送? 2)发送失败场景下重新发送再次失败后又该如何显示、排序

74830

得物自研客服IM收发聊天消息背后技术逻辑和思考实现

本文将探秘得物自研客服IM收发聊天消息背后技术逻辑和思考实现,帮助大家了解如何在IM聊天场景中提供高效、安全、可靠和良好用户体验。...我们可以很清晰地看到当客服开始输入消息时候就开始进行通知对方正常输入,触发消息发送后需要进行消息创建、排序、去重检测、网络检测、聊天列表渲染、推入超时重试队列、放入消息拦截器中统一进行消息格式转化并发送...再说回我们客服IM,我们是如何处理消息排序呢?整个开发过程也是比较曲折,最终是以IM网关维护Seq为准,然后返回到发送方,发送根据消息序号进行排序,确保发送方和接收方消息排序是一致。...体验优化过程不妥协也是非常重要策略,体验优化过程,必须保持理性和客观,根据用户调研和数据分析进行合理权衡和决策,以实现最佳用户体验。...一些小细节优化也可以起到事半功倍效果,IM系统,一些细节优化包括:及时消息提示、清晰消息展示、精确消息发送时间等等。

29740

客服发送一条消息背后技术和思考

本文将探秘客服发送一条消息背后技术和思考,帮助大家了解如何在IM聊天场景中提供高效、安全、可靠和良好用户体验。...我们可以很清晰地看到当客服开始输入消息时候就开始进行通知对方正常输入,触发消息发送后需要进行消息创建、排序、去重检测、网络检测、聊天列表渲染、推入超时重试队列、放入消息拦截器中统一进行消息格式转化并发送...再说回我们客服IM,我们是如何处理消息排序呢?整个开发过程也是比较曲折,最终是以IM网关维护Seq为准,然后返回到发送方,发送根据消息序号进行排序,确保发送方和接收方消息排序是一致。...体验优化过程不妥协也是非常重要策略,体验优化过程,必须保持理性和客观,根据用户调研和数据分析进行合理权衡和决策,以实现最佳用户体验。...一些小细节优化也可以起到事半功倍效果,IM系统,一些细节优化包括:及时消息提示、清晰消息展示、精确消息发送时间等等。

26831

聊天IM时间戳显示规则

=========================================== 参考基准 当处于正在聊天时,聊天内容比聊天时间更为重要,尽量避免时间发送状态对聊天内容干扰,简化界面,仅保留最核心信息...Badge(未读消息数量) 当消息数量达到三位数时(也即消息数量 > 99),显示…而非数字,缓解/减轻强迫症患者心理压力 时间戳显示 时间戳由客户端自行处理,时间显示根据不同场景进行显示,可参考下面几种典型使用场景...,然后将这个时间戳插入到界面并记录下来(假设使用变量lastShowTimeStamp进行记录),然后将消息时间戳(从小到大排序,老消息在前新消息在后),追加到界面,但需要注意时间显示规则。...会出现一种情况,就是向上拉取消息时,你会遇到同一分钟内发送消息各有一个时间戳,而且时间戳是相同。出现原因是消息分属二页内了 示例截图如下: ?...删除完消息后检查当前消息数,少于一页时自动再加载上一页数据,直至没有消息可供加载。 示例截图如下(第一张图是正常,第二张图是非正常,退出聊天重新进入或等5分钟之后便可恢复正常): ? ?

4.4K41

理解IM消息“可靠性”和“一致性”问题,以及解决方案探讨

所以要保证消息完整,就需要在建立连接后,根据上一条消息(已经 ACK)时间戳,获取会话记录,一次返回一段时间内所有消息(PS:中大型应用消息拉取也不是个简单事情,详情可以阅读《IM开发干货分享:如何优雅实现大量离线消息可靠投递...(五):开源分布式ID生成器UidGenerator技术实现》 《IM消息ID技术专题(六):深度解密滴滴高性能ID生成器(Tinyid)》 5.2 使用向量时钟进行消息排序 对于消息排序问题:因为聊天...偏序关系:如果 A 向量每一维都大于等于 B 向量,则 A、B 之间存在偏序关系,否则不存在偏序关系。 对于IM为聊天消息排序来说,其实就是处理聊天消息上下文语境,决定消息之间因果关系。...参考向量时钟算法:假设有 N 个消息会话方,系统向量时钟由 N 维时钟组成,向量时钟各方发送消息传递,并依据向量时钟排序。...IM 场景很多,也很复杂,更多时候需要从产品角度考虑问题。 对于消息是否需要排序问题,这里只提出一个比较通用方案:建议会话不强制排序,会话历史记录按照向量时钟偏序关系进行排序

50000

理解IM消息“可靠性”和“一致性”问题,以及解决方案探讨

所以要保证消息完整,就需要在建立连接后,根据上一条消息(已经 ACK)时间戳,获取会话记录,一次返回一段时间内所有消息(PS:中大型应用消息拉取也不是个简单事情,详情可以阅读《IM开发干货分享:如何优雅实现大量离线消息可靠投递...:因为聊天消息顺序对于发送表述有重要影响,消息不完整或顺序颠倒都可能造成语意不连贯,甚至曲解。...偏序关系:如果 A 向量每一维都大于等于 B 向量,则 A、B 之间存在偏序关系,否则不存在偏序关系。 对于IM为聊天消息排序来说,其实就是处理聊天消息上下文语境,决定消息之间因果关系。...参考向量时钟算法:假设有 N 个消息会话方,系统向量时钟由 N 维时钟组成,向量时钟各方发送消息传递,并依据向量时钟排序。...IM 场景很多,也很复杂,更多时候需要从产品角度考虑问题。 对于消息是否需要排序问题,这里只提出一个比较通用方案:建议会话不强制排序,会话历史记录按照向量时钟偏序关系进行排序

1K20

消息可靠性设计,看这一篇就够了

辅导老师可以聊天区,和学生进行沟通,或者学生回答老师问题,达到一个互动目标。这些直播互动依赖是消息通道。...直播课堂消息通道是一个核心功能模块,它承载了直播课堂所有的课堂互动(答题卡,习题,红包,签到,举手,上下课命令,禁言等)和聊天。...目标:保证去重和有序情况下,尽量不丢失消息 设计要点1:消息入库时候生成连续递增 seq 客户端就可以根据到达消息 seq,知道自己是缺了哪些,然后去重试拉取缺失消息进行去重和排序。...设计要点5:空洞拉取要点 如何进行空洞拉取,也是可靠方案关键,所以空洞拉取方案迭代过多次,这里说一下以前做法,避免回头踩坑。... JS 可以直接使用一个对象来表示。只要指定 seq,则可以快速取到相应消息消息和去重上都是非常快。有序下发,只要按序递增 seq,就可以按序取消息下发,不需要对消息进行排序

57110

融云技术分享:全面揭秘亿级IM消息可靠投递机制

3)服务端主动-发送通知(通知拉取): 这是在线消息发送机制之一,简单理解为服务端给客户端发送一个通知,通知包含时间戳等可作为排序索引内容,客户端收到通知后,依据自身数据,对比通知内时间戳,发起拉取消息流程...4.1 上行 在上行过程保证发送消息顺序,为了保证消息有序, 最好方式是按照 userId 区分,然后使用时间排序。...通知拉取时候客户端选择本地最新一条消息时间戳作为开始拉取时间; 3)消息发送过程,如果上一条消息发送流程未结束,下一条消息则不用直发(s_msg),而是用通知(s_ntf)。...直发逻辑示意图: 2)通知拉取: 即服务端主动发送通知(给目标客户端): 1)服务端通知体携带当前消息时间戳。...这样完成了发送多端抄送,然后将这条消息投递到 IM 服务。进入正常发送投递流程。

84120

融云技术分享:全面揭秘亿级IM消息可靠投递机制

3)服务端主动-发送通知(通知拉取): 这是在线消息发送机制之一,简单理解为服务端给客户端发送一个通知,通知包含时间戳等可作为排序索引内容,客户端收到通知后,依据自身数据,对比通知内时间戳,发起拉取消息流程...4.1 上行 在上行过程保证发送消息顺序,为了保证消息有序, 最好方式是按照 userId 区分,然后使用时间排序。...通知拉取时候客户端选择本地最新一条消息时间戳作为开始拉取时间; 3)消息发送过程,如果上一条消息发送流程未结束,下一条消息则不用直发(s_msg),而是用通知(s_ntf)。...2)通知拉取: 即服务端主动发送通知(给目标客户端): 1)服务端通知体携带当前消息时间戳。...这样完成了发送多端抄送,然后将这条消息投递到 IM 服务。进入正常发送投递流程。

75220

应用消息中间件设计可以解决哪些实际问题?

发布/订阅功能使得发送者和接收者之间耦合关系变得更为松散,发送者不必关心接收者目的地址,而接收者也不必关心消息发送地址,而只是根据消息主题进行消息收发。...除非客户端明确表示已经处理完了这个消息,否则这个消息会被放回队列中去,一段可配置时间之后可再次被处理。 1.7排序保证 许多情况下,数据处理顺序都很重要。...消息队列本来就是排序,并且能保证数据会按照特定顺序来处理。IronMO保证消息浆糊通过FIFO(先进先出)顺序来处理,因此消息队列位置就是从队列检索他们位置。...订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功库存系统:订阅下单消息,采用拉/推方式,获取下单信息,库存系统根据下单信息,进行库存操作假如:在下单时库存系统不能正常使用...比如实现点对点消息队列,或者聊天室等 点对点通讯: ? 客户端A和客户端B使用同一队列,进行消息通讯。 聊天室通讯: ? 客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。

70120

企点3.2 | 在线客服新功能来袭

| 2.全局搜索优化   账户中心 1.图文素材审核 账户中心-「互动营销」-「图文素材」页面,新建图文素材需进行审核。...审核通过文章可正常使用,审核文章将无法编辑。...*注意:人工审核不通过文章,原文链接访问时提示内容暂时无法访问 *注意人工审核时间安排在工作日 2.DOM型接待组件中转页设置 企业可根据自身业务情况灵活选择是否接入客服时开启中转页,避免因中转页存在跳转时间而导致客户流失...员工可以打开主菜单「设置」-「系统设置」-「自定义设置」页面,勾选“按客户接入时间排序”,选定后,列表顺序保持相对固定不变,且排序模式下可以通过鼠标拖拽联系人调整顺序。 3....其他优化 1.主号加好友体验优化 员工添加客户为主号好友,客户同意后,自动入库时将自动归属给最近一个发送好友请求员工;当客户主动添加企业主号为好友时,将不会自动设置归属。

2.8K10

IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总

5.2 通讯录分组/好友排序 微信通讯录分组、好友排序,是根据微信通讯录朋友昵称首字母(或首个汉字拼音首字母)由A-Z排序。...5.6 通讯录黑名单功能逻辑 将对方加入黑名单后,与对方关系逻辑如下: 1)自己会话列表不再显示与其聊天记录,解除黑名单后会重新出现在会话列表; 2)在对方通讯录好友列表仍然会显示; 3)将不再接收到对方消息...; 4)对方无法给你发消息,会提示“对方拒绝接收您消息”,自己可以给对方正常发送消息; 5)互相无法查看更新后头像、个性签名; 6)对方将无法查看你微信个人相册和对照片进行评论; 7)互相看不到朋友圈更新...2)不看他(她)朋友圈(即屏蔽好友朋友圈): 朋友圈不会显示对方发送朋友圈消息。...8.3 “对方正在输入”显示规则 给对方发送消息后,对方 10 秒内回复才可以看到该提示。 ? 8.4 聊天消息撤回时限 微信规则是可以撤回2分钟内发送消息

1.9K20

IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总

5.2 通讯录分组/好友排序 微信通讯录分组、好友排序,是根据微信通讯录朋友昵称首字母(或首个汉字拼音首字母)由A-Z排序。...5.6 通讯录黑名单功能逻辑 将对方加入黑名单后,与对方关系逻辑如下: 1)自己会话列表不再显示与其聊天记录,解除黑名单后会重新出现在会话列表; 2)在对方通讯录好友列表仍然会显示; 3)将不再接收到对方消息...; 4)对方无法给你发消息,会提示“对方拒绝接收您消息”,自己可以给对方正常发送消息; 5)互相无法查看更新后头像、个性签名; 6)对方将无法查看你微信个人相册和对照片进行评论; 7)互相看不到朋友圈更新...2)不看他(她)朋友圈(即屏蔽好友朋友圈): 朋友圈不会显示对方发送朋友圈消息。...8.3 “对方正在输入”显示规则 给对方发送消息后,对方 10 秒内回复才可以看到该提示。 8.4 聊天消息撤回时限 微信规则是可以撤回2分钟内发送消息

2.2K30

MQ消息队列应用场景比较介绍

如何解决这个问题呢? 引入消息队列,将不是必须业务逻辑,异步处理。改造后架构如下: ? 按照以上约定,用户响应时间相当于是注册信息写入数据库时间,也就是50毫秒。...订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功 库存系统:订阅下单消息,采用拉/推方式,获取下单信息,库存系统根据下单信息,进行库存操作 假如:在下单时库存系统不能正常使用...也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他后续操作了。实现订单系统与库存系统应用解耦 2.3流量削锋 流量削锋也是消息队列常用场景,一般秒杀或团抢活动中使用广泛。...比如实现点对点消息队列,或者聊天室等 点对点通讯: ? 客户端A和客户端B使用同一队列,进行消息通讯。 聊天室通讯: 客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。...面向服务架构通过消息代理(比如 RabbitMQ / Kafka等),使用生产者-消费者模式服务间进行异步通信是一种比较好思想。 因为服务间依赖由强耦合变成了松耦合。

1.2K10

消息队列使用场景综述

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式时间是150毫秒,并行时间可能是100毫秒。 因为CPU单位时间内处理请求数是一定,假设CPU1秒内吞吐量是100次。...,进行库存操作 假如:在下单时库存系统不能正常使用。...场景3:流量削锋 流量削锋也是消息队列常用场景,一般秒杀或团抢活动中使用广泛 应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。...假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面 秒杀业务根据消息队列请求信息,再做后续处理。 关注公众号【可为编程】回复【面试】领取年度最新面试题大全!!!...比如实现点对点消息队列,或者聊天室等 点对点通讯: 客户端A和客户端B使用同一队列,进行消息通讯。 聊天室通讯: 客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

19430

直播系统聊天技术(九):千万级实时直播弹幕技术实践

该次直播活动采用了动态Token鉴权机制,即根据用户账号、登录时间、分配接入地址以及鉴权中心按时间区间生成“随机数以及对应Token算法”动态计算鉴权Token。...6、弹幕技术方案之收发消息(弹幕、礼物)实时收发消息是直播间核心业务,主要分为弹幕和礼物两类:1)礼物因涉及付费等因素一般通过客户方业务服务器发送;2)弹幕消息则可以通过聊天室长链接发送。...首先:为了节约消息产生带宽,大型直播项目开始阶段,就需要对消息格式进行优化,充分精简消息体大小。...上层级根据下层级能够支撑处理能力设计相对较粗粒度本地流控机制。弹幕反垃圾业务阶段,因需要全局控制消息量,因此采用分布式全局流控方案;弹幕广播阶段则根据业务广播需求再一次进行消息流控。...实际投递消息过程,若前一个队列消息量不足,可将剩余消息数量叠加到下一个队列,以确保每一个周期都发送足够消息给用户。弹幕可通过长连接或CDN广播给其他用户。

27221

RocketMQ实践问题

我们看下下面这个流程图: 1、为什么要发送个half消息?有什么用? 这个half消息订单系统进行下单操作前发送,并且对下游服务消费者是不可见。...订单场景下,通常会要求下单完成后,客户一定时间内,例如10分钟,内完成订单支付,支付完成后才会通知下游服务进行进一步营销补偿。 如果不用事务消息,那通常会怎么办?...这样等RocketMQ服务恢复过来后,就能第一时间把这些消息重新发送出去。整个这套降级机制,大型互联网项目中,都是必须要有的。...RocketMQ,可以发送发送消息时指定一个MessageSelector对象,让这个对象来决定消息发入哪一个MessageQueue。...然后Topic上,就可以通过增加消费者个数来提高消费速度了。之后再根据情况恢复成正常情况。 官网,还分析了一个特殊情况。

44940

如何设计一个亿级消息 IM 系统

对于关系链存储,可以使用图数据库(Neo4j等等),可以很自然地表达现实世界关系,易于建模 单聊 :一对一聊天 群聊 :多人聊天 客服 :电商领域,通常需要对用户提供售前咨询、售后咨询等服务。...写扩散,每个人都只从自己信箱里读取消息,但写(发消息时候,对于单聊跟群聊处理如下: 单聊:往自己信箱跟对方信箱都写一份消息,同时,如果需要查看两个人聊天历史记录的话还需要再写一份(当然,...解决方案: 前端依次对消息进行处理,发送完一个消息发送下一个消息。这种方式会降低用户体验,一般情况下不建议使用。 带上一个前端生成顺序ID,让接收方根据该ID进行排序。...这种方式前端处理会比较麻烦一点,而且聊天过程接收方历史消息列表可能会在中间插入一条消息,这样会很奇怪,而且用户可能会漏读消息。...前端只需要记录最后同步位点,同步时候带上同步位点,然后服务器就将该位点后面的数据全部返回给前端,前端更新同步位点就可以了。 如何处理未读数 IM系统,未读数处理非常重要。

2.9K53
领券