ZMQ使用EPGM多端并发时,接收端收包乱序问题分析

本文深入分析了在使用ZMQ和EPGM协议时遇到的接收端数据乱序问题。当数据量较大时,EPGM的分包和UDP的特性导致乱序,而TCP协议由于其连接性和有序性保证避免了这种情况。解决方案是将大消息合并为单个逻辑包发送。
摘要由CSDN通过智能技术生成

问题背景

在如下场景中出现问题,在发送端使用EPGM协议进行发送,会发送topic(带上more),再发送data数据。

例如:A,B端发送数据到C端,A端分别为A1(带more标记),A2。B端分别发送B1(带more标记),B2。

当A1,A2总数据量比较大时,例如大于1500字节时,C端收到的数据顺序为A1,B1,B2。出现乱序情况。

相关测试结论:

1、当A1、A2数据量比较小时,例如在几百个字节的时候,则不会出现乱序问题。

2、当逻辑代码不变,只把传输协议转变为TCP的时候,不会出现乱序问题。

3、当A1、A2数据量比较大时,例如上万字节时,不把他们逻辑上分包,直接合并成一个逻辑包发送。接收端的数据能正常接收。

原理梳理

先从原理上理解整个机制的发生过程:

1、ZMQ是使用了第三方的openpgm库进行发送。而这里用的协议是EPGM,他是使用传输层的udp协议对数据进行传输。

2、udp协议在一次传输过程中,协议设计的极限是一次性不能传输超过65535字节的数据。

3、对于大数据量的传输来说,由于udp的限制,一定会在EPGM这一层对数据进行分包的。具体多少,需要查看代码。

4、整个的传输过程是这样 zmq -> 发送方pgm -> 网络中udp -> 接收端pgm -> zmq -> 用户代码拿到数据。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值