美文网首页
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消息先发后到的问题

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