当前位置: 首页 > 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 …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

基于 TAPD 进行项目管理

起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...