当前位置: 首页 > news >正文

四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较

目录

摘要(Abstract)

实验设置

实验结果


节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia 和 Paul Refalo,来自马耳他大学的计算机信息系统系和工业与制造工程系。论文发表在2024年IEEE国际测量与网络研讨会上。

摘要(Abstract)

论文讨论了在工业物联网(IIoT)监控系统中选择适当的应用层协议的重要性。作者指出,尽管已有研究提供了各种协议的性能比较,但这些研究结果可能不适用于工业场景。本文提出了一个实验设置,纠正了以前研究中的方法论错误,并报告了所获得的结果,这些结果与以前研究的结果存在显著差异。

实验设置

在论文的“实验设置(Experimental Setup)”部分,作者们详细描述了他们如何构建实验环境来评估和比较四种应用层协议(MQTT、CoAP、WebSockets和HTTP)在工业物联网(IIoT)监控系统中的性能。以下是实验设置的详细介绍:

  1. 实验场景

    • 实验模拟了一个微控制器向网关设备发送传感器数据的场景,这在制造工厂的监控系统中用于检测气动系统中的泄漏。
  2. 硬件选择

    • 微控制器设备:CONTROLLINO MAXI Automation,这是一个工业级的可编程逻辑控制器(PLC),与Arduino平台兼容。
    • 网关设备:Endian 4i,这是一个工业物联网网关,支持Docker容器,用于运行所需的软件组件。
  3. 网络连接

    • 微控制器和网关设备通过千兆交换机连接。
  4. 协议实现

    • 微控制器上使用Arduino平台的现有库实现所选协议:CoAP简单库用于CoAP,arduino-mqtt库用于MQTT,ArduinoHttpClient库用于WebSockets和HTTP。
    • 网关上使用Python脚本实现协议,使用相应的Python库:aiocoap用于CoAP,Paho库用于MQTT,websockets库用于WebSockets,Flask库用于HTTP。
  5. MQTT代理配置

    • 在网关上部署了Mosquitto代理的Docker容器,并调整配置以避免在有大量消息在途或排队时丢弃消息。
  6. 协议配置

    • 对CoAP、MQTT和HTTP协议的不同配置进行了测试。例如,CoAP测试了使用确认消息和非确认消息的场景,MQTT测试了三个QoS级别,HTTP测试了使用Flask内置服务器和使用Gunicorn WSGI服务器的场景。
  7. 时间同步

    • 为了确保实验的准确性,使用NTPClient库在微控制器和网关设备之间进行时间同步。
  8. 实验参数

    • 实验持续时间:2分钟。
    • 实验重复次数:3次。
    • 负载大小:42字节(包括发送时间)。
    • 消息发送间隔:5毫秒。
  9. 数据格式

    • 使用CSV格式发送随机生成的数据,因为CSV格式对负载的修改最小,对结果影响最小。
  10. 性能指标测量

    • 传输时间:通过在每个消息中添加发送时间,并在网关上添加接收时间来测量。
    • 带宽消耗:使用tshark捕获所有接收到的数据包,以测量带宽消耗。
  11. 实验重复性

    • 所有实验都重复三次,并对所有重复的平均值进行计算,以确保结果的稳健性。

通过这个实验设置,作者们能够评估和比较不同协议在工业物联网环境中的性能,特别是在传输时间、带宽消耗方面的表现。

实验结果

在论文的“结果与讨论(Results and Discussion)”部分,作者们展示了他们对四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较结果。以下是该部分的详细介绍:

  1. 性能指标定义

    • 平均延迟(Average Latency):从微控制器到网关传输单个有效载荷所需的平均时间。
    • 抖动(Jitter):传输单个有效载荷所需时间的标准差。
    • 吞吐量(Throughput):每秒成功传输的消息数量。
    • 协议效率(Protocol Efficiency):有用信息字节总数与交换的总字节数之间的比率。
  2. 实验结果

    • 结果通过图表展示,其中包括了MQTT不同服务质量(QoS)级别的性能对比,以及CoAP和WebSockets的性能数据。HTTP作为对照组,其性能在大多数指标上表现不佳。
  3. MQTT协议

    • MQTT在延迟方面表现最佳,尤其是当配置为QoS级别0时。然而,当使用QoS级别1或2时,其吞吐量不如CoAP和WebSockets。
  4. CoAP协议

    • CoAP在带宽使用效率方面表现最佳,尤其是使用非确认消息时。但是,CoAP在延迟和吞吐量方面并不总是优于其他协议。
  5. WebSockets协议

    • WebSockets在吞吐量方面与CoAP相当,但在延迟和抖动方面不如MQTT。
  6. HTTP协议

    • HTTP在平均延迟、吞吐量和协议效率方面表现最差。作者指出,这可能是由于HTTP协议对资源受限的微控制器造成的计算负担。
  7. 协议选择建议

    • 如果传输时间是优先考虑的因素,建议使用MQTT-0(QoS级别0)。如果带宽受限,建议使用CoAP-NONCON(非确认消息),以最小化消耗的带宽。
  8. 结果差异讨论

    • 作者讨论了他们的实验结果与文献中报告的结果之间的显著差异,强调了在现实场景中评估应用层协议性能的重要性。
  9. 实验重复性

    • 所有实验都重复了三次,以确保结果的稳健性,并且计算了所有重复的平均值。
  10. 数据捕获方法

    • 微控制器在每个消息中添加发送时间,网关接收消息并添加接收时间,然后保存这些时间以供后续处理。使用tshark捕获所有接收到的数据包,以测量带宽消耗。
  11. 实验局限性和未来工作

    • 论文指出了实验的局限性,例如没有考虑网络中添加额外客户端设备的影响。未来的工作将考虑这种fan-in通信场景,这可能在从不同设备收集传感器数据的监控系统中被采用。

通过这一部分的分析,作者们提供了对于不同应用层协议在工业物联网环境中的性能表现的深入见解,并为实际应用中的协议选择提供了指导性建议。

相关文章:

四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较

目录 摘要(Abstract) 实验设置 实验结果 节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia …...

MySQL的脏读、不可重复读、幻读与隔离级别

脏读/不可重复读/幻读 脏读 脏读(Dirty Read)发生在一个事务读取了另一个事务尚未提交的数据。如果第二个事务失败并回滚,第一个事务读到的数据就是错误的。这意味着数据从一开始就是不稳定或者“脏”的。 举例 事务A读取了某条记录的值为X。事务B修改该记录的值…...

程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇

正文: 在这个充满变数的时代,作为一名前端开发者,我经历了行业的起伏,见证了裁员危机和中年失业危机的残酷。在这样的背景下,我开始了利用AI绘画作为副业的探索,不仅为了寻求经济上的稳定,更是为…...

Burp Suite的使用和文件上传漏洞靶场试验

第一步:分析如何利用漏洞,通过对代码的查阅发现,代码的逻辑是先上传后删除,意味着,我可以利用webshell.php文件在上传到删除之间的间隙,执行webshell.php的代码,给上级目录创建一个shell.php木马…...

如何在Ubuntu中安装deepin wine版的企业微信

如何在Ubuntu中安装deepin wine版的企业微信 运行如下一条命令将移植仓库添加到系统中 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh自此以后,你可以像对待普通的软件包一样,使用apt-get系列命令进行各种应用安装、更新和卸载清理了。 安装企业…...

案例:Nginx + Tomcat集群(负载均衡 动静分离)

目录 案例 案例环境 案例步骤 部署Tomcat服务器 部署Nginx服务器 实现负载均衡和读写分离 日志控制 案例 案例环境 操作系统 IP 地址 角色 CentOS 192.168.10.101 Nginx服务器(调度器) CentOS 192.168.10.102 Tomcat服务器① CentOS 1…...

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么? 认证协议都在认证些什么东西呢?认证一般要认证三个东西&#x…...

异步编程(Promise详解)

目录 异步编程 回调函数 回调地狱 Promise 基本概念 Promise的特点 1.Promise是一种构造函数 2.Promise接收函数创建实例 3.Promise对象有三种状态 4.Promise状态转变不可逆 5.Promise 实例创建即执行 6.Promise可注册处理函数 7.Promise支持链式调用 Promise的静…...

DjangoORM注入分享

DjangoORM注入 简介 ​ 这篇文章中,分享一些关于django orm相关的技术积累和如果orm注入相关的安全问题讨论。 ​ 攻击效果同数据库注入 从Django-Orm开始 开发角度 ​ Django ORM(Object-Relational Mapping)是Django框架中用于处理数…...

【HBZ分享】Redis各种类型的数据结构应用场景

String(字符串类型) 计数器: incr / decr, 比如商品库存,业务号的发号器业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力分布式session会话, 集群环境下存储token鉴权信息分布式锁&#xff…...

anaconda创建并且配置pytorch(完整版)

📚博客主页:knighthood2001 ✨公众号:认知up吧 ** 🎃知识星球:【认知up吧|成长|副业】介绍** ❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️ 🙏笔者水平有限,欢迎各位大…...

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same…...

AtCoder Beginner Contest 365 A~E

A.Leap Year(思维) 题意: 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内, Y Y Y年的天数如下: 如果 Y Y Y不是 4 4 4的倍数,则为 365 365 …...

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…...

(回溯) LeetCode 78. 子集

原题链接 一. 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…...

DQL数据查询语言(多表处理)—/—<7>

一、多表处理 当前有两个表,一个是学生表student,一个是分数表score student表字段名表示如下(共1000条数据): score表字段表示如下(共6000条数据): 1、求每个学生的总分 SELECT …...

力扣刷题总结

去年有段时间一直在刷题,进步神速,解决了以往刷完就忘的问题,这里总结下经验,给有需要的人参考下,核心观点就仨: 1. 打好数据结构与算法基础 2. 多刷题多练习 3. 形成自己的知识体系 下图是我梳理的知识体…...

BLDC ESC 无刷直流电子调速器驱动方式

BLDC ESC 无刷直流电子调速器驱动方式 1. 源由2. 驱动方法2.1 Trapezoidal 1202.2 Trapezoidal 1502.3 Sinusoidal 1802.4 Field-Orientated Control (FOC) 3. FOC(Field-Oriented Control)3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换&#xff08…...

解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题

在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种编译和运行错误,其中之一就是 Groovy 编译器错误(Groovyc: Internal groovyc error: code 1)或 JVM 内存不足错误。这类错误可能会影响开发效率,但通过调整 JVM 内…...

LeetCode.2940.找到Alice和Bob可以相遇的建筑

友情提示:这个方法并没有通过案例,只通过了944个案例(很难受),超时了,但是想着还是分享出来吧 题目描述: 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i …...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...