首页 > 其他分享 >升讯威在线客服系统的并发高性能数据处理技术:实现拔网线也不丢消息的高可靠通信(附视频)

升讯威在线客服系统的并发高性能数据处理技术:实现拔网线也不丢消息的高可靠通信(附视频)

时间:2023-11-17 10:23:49浏览次数:32  
标签:Socket 客服 报文 升讯威 TCP 网线 数据处理 消息

我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。

客服系统开发过程中,最让我意外的是对 TCP/IP 协议的认识。过去一直认为 TCP/IP 是可靠的连接,加上过去开发的软件网络环境比较稳定,很少在这个问题上纠结。

直到客服系统的客户越来越多,才重新让我认识了基于 TCP/IP 协议的软件应该如何设计开发。

有许多客户做的是外贸业务,服务器部署在海外,比如香港、韩国、美国等,有些客服之前用基于网页的客服系统,最为困扰的问题就是丢消息!而使用我的客服系统,做到了100%稳定,不丢客户不丢消息


演示网络中断,直接禁用网卡,或者手机进入飞行模式,也不丢消息,不出异常。

视频地址:https://v.youku.com/v_show/id_XNTEwNzQ5Mzg2OA==.html


我会通过一系列的文章详细分析升讯威在线客服系统的并发高性能技术是如何实现的,使用了哪些方案以及具体的做法。本文将介绍如何为多线程处理同步数据。

先看实现效果

客服端

访客端


本文将分几个部分,详细介绍基于 TCP/IP 协议开发时,应该如何考虑复杂网络环境下的消息传输。


TCP 报文的确认机制

首先我们回顾一下 TCP 协议,TCP 报文格式一般如下所示:
其中的 ACK ,表示对报文是否送达的一个回应。
在这里插入图片描述
ACK是TCP标头中的标志和字段。 发送一个消息至少需要一个标头,再加上所有较低层的内容。

下图则显示了 TCP 通信时,客户端和服务端之间报文传送的过程。
从图中可以看到,发出的消息,和回应的消息,都会有一个编号,如:#1、#2
在ACK报文回应时,它回附带上所收到的报文的编号,那么发送端只需根据收到的ACK报文中的编号,就能判定报文是否送达,已经所送达的数据包。如果在一定时间内,没有收到回应的ACK消息,则发送端会在一定时间内重新尝试发送。
在这里插入图片描述

通过 C# 实现拔网线也不丢消息的高可靠通信

基于 TCP 协议自有的消息确认机制,我们在上层应用中实现可靠的通信就比较简单了。底层通信相关的类已经帮我们实现好了可靠的 TCP 传输,一旦出现网络异常,我们在上层都能够收到相应的通知。

客户端自身网络异常

这种情况最好处理。因为客户端程序异常退出会直接引发 ConnectionReset 的 Socket 异常。我们只需要在服务端捕获这个异常进行处理即可:

 public bool Send(byte[] data)
        {
            // 连接已经断开了
            try
            {
                _networkStream.Write(data, 0, data.Length);
            }
            catch (Exception ex)
            {
                OnDisconnected(ex);
                return false;
            }

            return true;
        }

网络链路异常

对于这种情况,我们只需要检测 Socket 对象的 Connected 属性。
但是需要特别注意:Socket 对象的 Connected 属性获取从 Socket 最后一个 i/o 操作到的的连接状态。 当它返回时 false , Socket 要么从未连接,要么不再处于连接状态。当 Socket 从另一个线程断开连接时,它可能会在操作中止后返回。
如果需要确定连接的当前状态,请发出非阻止的零字节发送调用。 如果调用成功返回或引发 WAEWOULDBLOCK 错误代码 (10035) ,则套接字仍处于连接状态;否则,将不再连接套接字。

我们可以通过实现一个定时心跳,来对网络链路进行检测:

_heartbeatTimer = new Timer((state) =>
            {
                HeartbeatMessage heartbeatMessage = new HeartbeatMessage();
                Send(heartbeatMessage);

            }, null, 3000, 3000);

在定时器发送心跳时,如果网络链路中断,我们可以收到以下消息:

 private void _socketClient_Disconnected(object sender, EventArgs e)
        {
            if (_heartbeatTimer != null)
                _heartbeatTimer.Dispose();

            if (_socketClient != null)
            {
                _socketClient.Close();
                _socketClient = null;
            }
        }

只需针对 Disconnected 事件,进行处理,将两端的状态,置于等待即可。


简介

升讯威在线客服与营销系统是一款客服软件,但更重要的是一款营销利器。

https://kf.shengxunwei.com/

  • 可以追踪正在访问网站或使用 APP 的所有访客,收集他们的浏览情况,使客服能够主动出击,施展话术,促进成单。
    访* 客端在 PC 支持所有新老浏览器。包括不支持 WebSocket 的 IE8 也能正常使用。
  • 移动端支持所有手机浏览器、APP、各大平台的公众号对接。
  • 支持访客信息互通,可传输访客标识、名称和其它任意信息到客服系统。
  • 具备一线专业技术水平,网络中断,拔掉网线,手机飞行模式,不丢消息。同类软件可以按视频方式对比测试。

希望能够打造: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。

钟意的话请给个赞支持一下吧,谢谢~

标签:Socket,客服,报文,升讯威,TCP,网线,数据处理,消息
From: https://www.cnblogs.com/sheng_chao/p/17838055.html

相关文章

  • 以太网通信控制板-A3-控制板作为TCP服务器和电脑TCP客户端通信(连接电脑网线方式, TCP
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节......
  • 升讯威在线客服系统的并发高性能数据处理技术:高性能OSS文件存储
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • Lab4:数据处理方法及创新应用(创新)
    代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintmain(){ intcnt=0; for(inti=100;i<=999;i++) { inttmp=i,sum=0; while(tmp) { intx=tmp%10; tmp/=10; sum+=x*x*x; } if(sum==i) { cnt++; cout<......
  • Excel 数据处理
    博客地址:https://www.cnblogs.com/zylyehuo/2023年高教社杯全国大学生数学建模竞赛题目--B题多波束测线问题图表格式importnumpyasnpimportmatplotlib.pyplotaspltfromopenpyxlimportload_workbookfrommatplotlib.tickerimportFuncFormatterfrom......
  • 【数据处理脚本】字符串
    1.检测一个字符串内是否有中文#检测字符串是否含有中文defis_contain_chinese(check_str):forchincheck_str:ifu'\u4e00'<=ch<=u'\u9fff':returnTruereturnFalse 2.去除括号内容以及括号importre line=re.......
  • 数据处理
    什么是数据处理数据处理是指对数据(包括数值的和非数值的)进行分析和加工的技术过程。也就是对数据的采集、存储、检索、加工、变换和传输,将数据转换为信息的过程。数据处理的涵义数据是对事实、概念或指令的一种表达形式,可由人工或自动化装置进行处理。数据的形式可以是数字、文字、......
  • 面对设备制造商打造的分布式设备数据处理中心有什么功能
    随着企业规模越来越大,设备制造商加强对分布式设备的监控管理已经是必然趋势,要求实现对每个客户、每个设备、每个故障的监控管理,从而提供优质的产品及服务,对于加强企业形象建设与竞争力有重要作用。 数之能打造的分布式设备数据处理中心(物联网数据中台),支持数据汇聚、数据解析、数据......
  • (Lora训练)(承接midjourney数据修改)(建对应名称txt与删txt内部后缀,括号,数字与转换下划线)Lo
    importosimportredefcreate_txt_from_image():#请求用户输入文件夹地址root_folder=input("请输入图片所在文件夹的完整路径:")#判断路径是否存在ifnotos.path.exists(root_folder):print("路径不存在,请检查输入的地址。")return#用......
  • 网线的小tip
    T568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕T568A:绿白、绿、橙白、蓝、蓝白、橙、棕白、棕 为了保证zui佳的兼容性,普遍采用EIA/TIA568B标准来制作网线。这两种接法的只要记住一个就可以了,第二种接法就是把1-3,2-6对换顺序接。那这两种线是怎么用呢?大家知道网线应该是两头都要......
  • JournalNode元数据处理过程
    1.背景在Hadoop2.x之前,只有一台NameNode负责对外提供服务,另外一台secondaryNameNode只用于合并fsimage,不提供对外元数据服务。因此NameNode和secondaryNameNode都存在单点问题。为了解决secondaryNameNode单点问题,HDFS引入多个JournalNode服务存储操作日志,取代单台secondary......