美文网首页
TCP消息先发后到的问题

TCP消息先发后到的问题

作者: 小怪兽狂殴奥特曼 | 来源:发表于2021-03-09 16:00 被阅读0次

遇到了一个场景:某个家居设备向云端后台连续推送了4条时间间隔非常短的tcp状态消息,任意两条消息的时间间隔在200ms内,每条状态消息的时间戳分别为t1,t2,t3,t4。从设备发出来的状态消息的顺序为t1->t2->t3->t4,消息的时间戳t1<t2<t3<t4。由于后台系统采用了微服务架构和多线程的编程模式,经过后台处理后,有一定概率这个四个消息到达app端的顺序不是t1->t2->t3->t4。
简而言之,从设备发出的时间间隔非常短的TCP消息经过后台处理转发后没有按发出顺序到达app端。
见下图:


捕获.PNG

解决方法:
对于同一台设备间隔时间非常短的消息,先经过一个中间服务。这个中间服务会将当前处理的消息的时间戳写到redis中记录起来。然后对于后到的消息,先取出cache中的时间戳t1跟当前的时间戳t0比较。如果t1>t0,说明这个是后发后到的消息,则放行。如果t1<t0,则表明这是一个后发先到的消息,则丢弃。
总体架构如下:


捕获3.PNG

相关文章

  • TCP消息先发后到的问题

    遇到了一个场景:某个家居设备向云端后台连续推送了4条时间间隔非常短的tcp状态消息,任意两条消息的时间间隔在200...

  • 消息粘包 和 消息不完整 问题

    消息粘包 和 消息不完整 问题 消息粘包 和 消息不完整问题 其实都是应用层会带来的问题,和TCP 没关系,TCP...

  • 同一条TCP链接数据包到达顺序

    以前一直以为数据包先发的不一定先到,直到今天才意识这个问题的缺陷,数据包是不一定先发先到,但是对于TCP有一点特殊...

  • Java 实现阻塞队列 Netty发送限流

    场景:项目使用Netty作为TCP客户端发送消息给TCP服务器出现了消息丢失问题(发送的是文件,按照规则分成几十个...

  • TCP黏包和拆包问题

    为了解决TCP黏包和拆包问题 我们可以把消息分为消息头和消息尾 消息头:消息的长度也就是发送的字节数组的长度 消息...

  • TCP三次握手四次挥手

    1.为什么要三次握手,而不是两次? (1)B资源浪费问题(先发后至导致的) a. A主动和B建立TCP连接,A的第...

  • TCP滑动窗口协议

    TCP面向流的滑动窗口确认机制 TCP是面向字节流的。 TCP消息确认机制如上图所示,首先,每一条消息都有一个识别...

  • 【第42天】python全栈从入门到放弃

    1 TCP三次握手和四次挥手 tcp三次握手: 一定是client先发起请求 a 客户端发起请求连接服务器 b ...

  • DNS 解析过程

    HTTP请求过程 DNS 域名解析 --> 发起 TCP 的 3 次握手 -->1) Client首先发送一个连接...

  • iOS 网络相关面试题

    问题:TCP、UDP TCP/UDP 传输层协议 ||—— UDP:用户数据报协议 TCP与UDP的区别: 问题...

网友评论

      本文标题:TCP消息先发后到的问题

      本文链接:https://www.haomeiwen.com/subject/rtcbqltx.html