客服系统简易版

客服系统简易版架构

整体架构解读

  • 客服端和商城端都通过websocket连接到客服系统, 并定期维持心跳
  • 当客户接入客服系统时, 先根据策略选择在线客服, 然后再发送消息给客服

websocket实现

netty实现websocket协议, 增加心跳处理的handler, 详见chat-server模块

客服路由规则

暂时仅支持轮询的规则

优化: 比较好的方案是对客服接入的客户数进行分别统计, 选择客户数最小的, 当然如果统计的精细一点, 应该是统计客服在一段时间内收发消息的吞吐量

消息存储

bzmall数据库的chat_messages表, 用于存储全部的消息, 对于同一个会话的消息, 应该设置一个会话内的唯一id, 方便通过他来计算数量; 另外应该给fromto(即发送者和接收者)设置索引, 方便会话消息查询

消息拉取

当重新打开会话页面时, 应该拉取最新的消息, 实现起来也比较简单, 直接获取该会话的消息, 正序排列, 取最后面的n条即可;

消息的未读数

  • 在会话页面时, 定期将消息进行批量确认, 比如当前页面展示的是id为1-5号的消息, 则在下一个批量确认时直接发送5即可, 这样服务端确认5号之前的消息设置为已读了; 另外需要创建一张消息offset表, 因为同一个会话的消息在chat_messages中只存了一份, 无法区分两端的不同情况;
  • 另外需要接入极光推送, 保证能及时收到消息提醒

优化: 可以让app在本地缓存消息的offset, 定期同步服务端, 未读数可以每次讲最大的id返回, 让app通过差值计算

消息同步

当通过websocket接收到消息后, app先将消息与本地的消息offset进行比较, 计算出未读数, 并进行渲染; 然后将消息内容在会话页面进行渲染

常见问题

用户分组

关于客户和客服都连接到websocket上了, 怎么进行区分并找到他们并路由过去呢, 现在的实现方式是每个接入websocket的客户端都提供了uid, 这个uid

的组成是类型_用户id, 通过不同的类型前缀区分是客户还是客服

优化: 在服务端设置两个不同的存储用来接收客户和客服的连接, 这样清晰一点

多端同步

这个暂时应该涉及不到, 就按照单端处理吧先

多媒体消息类型

处理图片、音频、视频的这些, 还是先上传OSS, 然后将url传入后端即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 和C通过共享内存通信

C 接收数据 #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> #include <string.h> #include <time.h> #include <sys/time.h>#define SHAERD_MEM_SIZE 20 * 1024 * 1024 // 20MBytes #define ImgWidth 1024 #define ImgHeig…

上新!Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型&#xff1b; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2)&#xff0c;多输入单输出&#xff0c;含不同置信区间图、概率…

出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错

目录&#xff1a; bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错解决方法 bug Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty 报错 在一个springboot demo启动的时候出现以下错误 &#xff0c;…

中国城市经济韧性数据集(2007-2022年)

数据来源&#xff1a;数据来自历年《中国城市统计NJ》、各省市《统计NJ》及《中国区域经济统计NJ》 时间范围&#xff1a;2007-2022年 数据范围&#xff1a;中国地级市样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff08;原始数据计算代码最终数据&…

大数据基础:离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 ​​​​​​​二、实时数仓建设思路 离线与实时数仓区别和建设思路 ​​​​​​​一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传…

zdppy+vue3+onlyoffice文档管理系统实战 20240829上课笔记 Python验证码框架完成

遗留的问题 还没有测试校验的功能 测试校验验证码的功能 生成验证码 from .tobase64 import get_base64 from .validate import is_captchadef captcha(api, cache, num4, expire60):""":param cache: 缓存对象:param num: 验证码的个数:param expire: 验证…

【软考】网络安全控制技术

目录 1. 说明2. 防火墙技术3. 加密技术4. 用户识别技术5. 访问控制技术6. 网络反病毒技术7. 网络安全漏洞扫描技术8.入侵检测技术9.例题 1. 说明 1.为了保护网络信息的安全可靠&#xff0c;除了运用法律和管理手段外&#xff0c;还需依靠技术方法来实现。2.网络安全控制技术目…

C++系列-STL容器之vector

STL概念 vector基本概念vector与数组的区别vector容器的特点动态大小连续存储自动扩容尾部操作高效 vector动态扩展的含义vector常用的接口示意 vector的构造函数vector赋值操作重载赋值assign赋值 vector的容量和大小vector的插入和删除vector数据存取vector互换容器vector互换…

Apache RocketMQ 批处理模型演进之路

作者&#xff1a;谷乂 RocketMQ 的目标&#xff0c;是致力于打造一个消息、事件、流一体的超融合处理平台。这意味着它需要满足各个场景下各式各样的要求&#xff0c;而批量处理则是流计算领域对于极致吞吐量要求的经典解法&#xff0c;这当然也意味着 RocketMQ 也有一套属于自…

从开题到答辩:ChatGPT超全提示词分享!(上)【建议收藏】

在浩瀚的知识领域中&#xff0c;提问的艺术是探索真理的钥匙。在这个信息爆炸的时代&#xff0c;深入探索知识的海洋&#xff0c;不仅需要热情和毅力&#xff0c;更需要正确的方法和工具。学术研究是一个复杂而严谨的过程&#xff0c;涉及从选题、文献综述到研究设计、数据收集…

Spring Boot常用注解及其含义

Spring Boot常用注解及其含义 注解含义SpringBootApplication标记主应用程序类&#xff0c;包含Configuration、EnableAutoConfiguration和ComponentScan。EnableAutoConfiguration启用Spring Boot的自动配置功能&#xff0c;根据类路径中的依赖自动配置应用程序。Configurati…

最新高仿拼夕夕源码/拼单系统源码/拼单商城/类目功能齐全

源码简介&#xff1a; 高仿拼夕夕源码&#xff0c;拼单商城系统源码、拼团商城源码&#xff0c;改的版本。拼夕夕拼团商城系统源码源码 多商户多区域拼团系统源码。 自己改的版本&#xff0c;类似于拼单的商城&#xff0c;功能齐全&#xff0c;看着还挺不错&#xff0c;绝对值…

能源与节能

期刊名称&#xff1a; 能源与节能 国内统一刊号(CN)&#xff1a; CN 14-1360/TD 国际标准刊号(ISSN)&#xff1a;ISSN 2095-0802 栏目设置&#xff1a;本刊特稿能源产业节能减排技术研究实践运用 征稿简则 本刊围绕科技发展规划和科技政策&#xff0c;刊登煤炭、石油、天然气…

macos 10.15 catalina xcode 下载和安装

在macos 10.15 catalina系统中, 由于系统已经不再支持,所以我们无法通过应用商店来安装xcode, 需要手动下载指定版本的 xcode 版本才能安装, catalina 支持的最新xcode版本为 Xcode v12.4 (12D4e) , 其他的新版本是无法安装在Catalina系统中的. Xcode_12.4.xip下载地址 注意,下…

git-命名规范

目录 压轴&#xff1a;压箱底的东西 博客几乎没人说这个&#xff0c;属于不可外传的东西。过段时间&#xff0c;我也会进行访问限制&#xff0c;毕竟&#xff0c;掌握人越少竞争压力越小&#xff0c;我也怕&#xff0c;请删谨慎保存。 分支命名策略&#xff1a; Git分支命名的…

RocketMQ第5集

一 RocketMQ的工作流程 1.1 生产环节producer Producer可以将消息写入到某Broker中的某Queue中&#xff1a;其中Producer发送消息之前&#xff0c;会先向NameServer发出获取消息Topic的路由信息的请求&#xff0c;NameServer返回该Topic的路由表及Broker列表。简单的说&…

火爆硅谷的“AI原生”代码编辑器Cursor使用体验

简单总结下&#xff1a; 如果现在你有需要改动到代码、有需要迅速了解一个开源项目的代码逻辑、或者对代码一直没有入门想要学习的话&#xff1a; 现在&#xff01;立刻&#xff01;马上&#xff01;下载体验使用cursor&#xff01;It‘s a life-saving decision&#xff01;…

排序算法见解(2)

1.快速排序 1.1基本思想&#xff1a; 快速排序是通过一趟排序将待排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#xff0c;整个排序过程可以递归进行&#xff0c;以…

IPv4地址和子网掩码

IP地址构成&#xff1a; IP 地址由 4 组 8 位二进制组成的&#xff0c;一共 32 位。 网络号和主机号&#xff1a; IP 地址由网络号和主机号组成。和第二张图片上一样&#xff0c;前面相同标蓝的就是网络号&#xff0c;不同的就是主机号。不同网络的通信需要通过路由器连接&…

Python简介、发展史

Python简介、发展史 本文目录&#xff1a; 零、时光宝盒 一、Python简介 二、Python设计者 三、Python发展史 四、Python语言的编程语言特性 五、Python现状 六、Python的未来 零、时光宝盒 我家所在的楼是3栋楼连接在一起的建筑&#xff0c;也就是3栋楼楼顶建筑上互通。…