iOS在MQTT协议上发布数据时减小有效负载大小



我正在处理加速度计和陀螺仪数据,我需要通过MQTT协议发布50Hz(每秒50条记录(的数据,移动端有30秒的缓冲区,用于收集数据,然后我们需要通过MQQT协议发布数据。由于数据量大,我正面临MQTT断开连接的问题。如果我们捕获30秒的数据,则数据大小将变为0.3 MB。这是不可能公布的。我不能用任何压缩方式。有人能建议我们如何发布大量数据,或者如何将有效负载大小最大减少到20KB吗?我正在使用AWSIoT&用于MQTT连接的AWSMobileClient

加速度计在一秒钟内给出50条记录,所以在30秒内创建了50*30=1500个字典,陀螺仪也发生了同样的情况。

数据格式:

{
"data": {
"accelerometerData": [
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
}
],
"gyroscopeData": [
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
},
{
"timeStamp": 1661747241,
"xAxis": 1231233.123231,
"yAxis": 1231233.123231,
"zAxis": 1231233.123231
}
]
},
"userid": "logged_in_user_id",
"deviceid": "deviceid//",
}

通过谷歌到达的每个人的迟到答案:

AWS物联网文档中一个名为AWS物联网核心消息代理和协议限制和配额的页面指出,每次发布的最大大小为128 KB,每次连接的最大吞吐量为每秒512 KB。发布的最大数量为100/秒。

如果你不能使用压缩,那么这里显而易见的解决方案是缓冲10秒的数据(100KB(,并每10秒发送一次,而不是每30秒。如果你想安全起见,可以每5秒(50KB(进行一次。

如果您需要超过aws-iot-cote吞吐量,那么可以考虑其他服务,如aws Kinesis。Mqtt适用于遥测,而不是数据流。

我不确定你是如何连接到aws iot核心的。如果您使用x509证书,那么您可以调用aws-iot凭据提供商来检索临时凭据,然后使用它们对驱动蛋白进行https调用。

我相信aws iot核心只是进入aws云的一种方式,你的数据最终会进入数据仓库或时间流。Kinesis可以与两者相结合。

为什么不发送两个没有属性名称的数组?

陀螺仪:[时间戳,x1,y1,z1,时间戳p2,x2,y2,z2,…]

这样可以减小有效载荷的大小。

那么,你需要所有的数据还是可以发送delta?所以您可以跳过时间戳,它并没有移动。

相关内容

  • 没有找到相关文章

最新更新