别不信:这些细节关乎你的物联网设备的命运!

news2024/11/23 13:10:09

在这里插入图片描述
《高并发系统实战派》-- 值得拥有

一、设备接入层网络协议的意义

随着物联网的发展,越来越多的设备需要接入云平台进行远程监控和管理。设备接入层网络协议起到了承担设备接入网络的功能,为物联网平台提供了数据交互的基础。设备接入层网络协议对于物联网平台来说具有重要意义。

  1. 保证网络安全:设备接入层网络协议能够对设备接入进行认证和授权,确保只有授权设备能够接入物联网平台,从而保证网络的安全性。

  2. 提高数据传输效率:设备接入层网络协议通过对数据进行压缩和优化等操作,确保数据传输的准确性和快速性,提高数据传输的效率。

  3. 实现设备互联互通:设备接入层网络协议能够实现不同厂商和不同类型的设备之间的互联互通,方便设备之间的数据交换和共享。

二、有哪些协议可选择?如何选择?应用场景?

  1. MQTT协议

MQTT是一种轻量级的、基于发布/订阅模式的物联网协议,其主要特点是支持异步消息传输、发布/订阅模式和低功耗。其应用场景主要包括智能家居、工业自动化等。

  1. CoAP协议

CoAP是一种基于RESTful架构的物联网协议,其主要特点是支持低功耗设备、在UDP上进行数据传输、具有轻量级的头部和智能的重传控制机制。其应用场景主要包括家庭自动化、可穿戴设备等。

  1. HTTP协议

HTTP是一种基于传输控制协议(TCP)的标准协议,其主要特点是支持多种请求方法、具有良好的安全保障机制。其应用场景主要包括物联网设备和云平台之间的数据交互。

  1. AMQP协议

AMQP是一种强大的、面向消息的异步协议,其主要特点是可靠性高、可扩展性好、支持消息流控制和流量整形等。其应用场景主要包括智能电网、物流等。

三、选择网络协议时需要考虑的关键点?

功能:网络协议要满足设备的功能要求,能够支持设备的数据交互和传输需求。
可靠性:要选择具有高可靠性的网络协议,能够保证数据传输的安全和稳定性。
跨平台支持:要选择能够跨平台支持的网络协议,支持不同操作系统和开发语言。

四、网络协议开发实战

选定设备接入层协议后,需要进行设备接入层的开发。以下是一些实战技巧:

(1) 设备认证与授权

通过设备认证和授权,可以确保只有真正的设备才能接入平台。在开发设备接入层时,需要先完成设备身份认证和授权的代码实现。

(2) 消息传输

设备接入层的主要目的是实现设备数据的上传和下载,并实现设备状态的监控等功能。在开发设备接入层时,需要先开发消息传输的相关代码实现,以便平台可以根据不同的协议进行数据传输,并将设备状态及时反馈给用户。

(3) 异常处理

设备接入层运行过程中,难免会出现一些异常情况。为了减少影响和保障可靠性,需要在开发设备接入层时,进行异常的及时处理,以便及时给出解决方案,并避免影响平台的运行。

下面以当前最受欢迎的MQTT协议为例进行讲解网络协议开发实战:

MQTT(Message Queuing Telemetry Transport)是一种轻量级的、消息发布/订阅协议,旨在为小型设备提供可靠的通信机制。MQTT协议使用可变长度的编码方式,具有开销小、开发简单、可靠性高等优点,在物联网应用中广泛应用。MQTT协议的工作原理图如下所示:

在这里插入图片描述

实现原理:

  1. 客户端连接服务器

MQTT协议使用TCP协议作为传输层,客户端需要通过TCP连接到MQTT服务器。客户端需要提供客户端ID、用户名、密码等信息。

  1. 发布消息

客户端可以发布消息到MQTT服务器,发布消息需要提供主题(Topic)和消息内容(Payload)。主题是一个字符串,用于标识一个消息的类型或者主题。例如,一个传感器设备可以发布温度数据到主题为“temperature”的主题。

  1. 订阅消息

客户端可以订阅一个或多个主题,以接收该主题相关的所有消息。订阅时可以添加可选的QoS(Quality of Service)标志,用于指定消息的传输质量。

  1. 接收消息

当一个客户端发布消息到一个主题时,MQTT服务器会将该消息传递给状态为“已订阅”的客户端。客户端可以通过回调函数来接收消息,并对该消息进行处理。

  1. 断开连接

客户端可以随时断开与MQTT服务器的连接。当客户端断开连接时,MQTT服务器会将关于该客户端的所有订阅信息从内存中清除。

QOS注意项:

MQTT协议中的QOS表示消息的服务质量等级(Quality of Service),包括三个级别:0、1、2。

QOS0:At most once

QOS0级别的消息发布被称作至多一次。这种服务质量级别的特点是快速、简单、不可靠。在QOS0级别中,发布者发布一条消息后,只发送一遍,不确定接收者是否成功接收消息。发送的消息也无法保证它是否被接收者处理。

QOS1:At least once

QOS1级别的消息发布被称作至少一次。这种服务质量级别的特点是可靠但不保证顺序。在QOS1级别中,发布者发布一条消息后,会一直发送这个消息,直到收到接收者的确认消息。如果没有收到确认消息,那么这个消息会被重新发送。所以,QOS1级别的消息一定会被接收者接收到,但可能会被重发多次。

QOS2:Exactly once

QOS2级别的消息发布被称作恰好一次。这种服务质量级别的特点是最可靠但不一定最快,可以保证消息被送达且顺序不变。在QOS2级别中,发布者发布一条消息后,会等待接收者回复确认消息并接收到这条消息,然后再发送这个消息的确认消息。如果接收者没有收到消息,发布者会继续发送这个消息,直到接收者成功接收到这个消息并发送确认消息。所以,QOS2级别的消息比QOS1级别的消息更可靠,但是由于涉及到多次交互,处理速度比QOS1级别慢。

总之,QOS级别用于确定消息发布者和接收者之间的交互方式和可靠性。QOS级别越高,消息的可靠性越好,但同时网络开销也越大,处理速度也越慢。根据实际需求,需要权衡可靠性和性能,选择合适的QOS级别。

开发示例:

下面使用 Java + 使用Eclipse Paho库实现发布了一个消息并订阅了主题。实现了MqttCallback和IMqttMessageListener接口,以便处理连接断开、消息到达和投递完成等回调事件。

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.MqttAsyncClient;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MqttClientExample implements MqttCallback, IMqttMessageListener {

private static final String MQTT_BROKER_URL = "tcp://iot.eclipse.org:1883";
private static final String MQTT_CLIENT_ID = "JavaExampleClient";
private static final String MQTT_TOPIC = "example/topic";

private MqttAsyncClient mqttClient;

public void start() {
    try {
        mqttClient = new MqttAsyncClient(MQTT_BROKER_URL, MQTT_CLIENT_ID, new MemoryPersistence());
        mqttClient.setCallback(this);

        MqttConnectOptions options = new MqttConnectOptions();
        options.setCleanSession(true);
        options.setAutomaticReconnect(true);

        mqttClient.connect(options).waitForCompletion();

        mqttClient.subscribe(MQTT_TOPIC, 0, this);

        publishMessage("Hello, MQTT!");
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

public void stop() {
    try {
        mqttClient.disconnect();
        mqttClient.close();
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

private void publishMessage(String messageText) {
    MqttMessage message = new MqttMessage(messageText.getBytes());
    message.setQos(0);
    try {
        mqttClient.publish(MQTT_TOPIC, message).waitForCompletion();
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

@Override
public void connectionLost(Throwable cause) {
    System.out.println("Connection lost: " + cause.getMessage());
}

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
    System.out.println("Message arrived: " + message.toString());
}

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
    System.out.println("Delivery complete: " + token.getMessageId());
}

public static void main(String[] args) {
    MqttClientExample example = new MqttClientExample();
    example.start();
}

}

总结:设备接入层是物联网平台的重要组成部分,不同的协议甚至可能影响到平台整体的稳定性。选择适合的设备接入层协议,以及合理开发实现不仅仅是技术问题,更需要研究设备的特性和应用场景,从而为物联网的无限可能提供有力支撑。

** 下一篇:物联网平台设备管理功能开发,敬请期待… **

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++ 入坑指南】(01)学习路线

入门 1. 推荐书籍 《Accelerated C》,《Essential C》二选一精读。《A Tour of C》选读。 《Accelerated C》很适合新手,因为只有短短不到 300 页,在普遍一样的入门书籍里面是一股清流。容易通读完,减少挫败感。就这样的篇幅&am…

【每天学习一点新知识】如何绕过CDN查真实ip

1、什么是CDN 为了防止流量过大网络堵塞,我们就在靠近用户的地方,建一个缓存服务器,把远端的内容复制一份,放在这里,简单来说就是将内容缓存在终端用户附近。 2、怎么绕过cdn找到远端服务器的真实ip呢? &…

FS2462是泛海微自主开发的5A降压型同步整流芯片

FS2462是泛海微自主开发的5A降压型同步整流芯片,是国内首家大电流同步5A芯片,内部集成极低RDS内阻20豪欧金属氧化物半导体场效应晶体管的(MOSFET)。输入工作电压宽至4.75V到21V,输出电压1.0V可调至20V。5A的连续负载电流输出可保证系统各状态…

Landing AI:计算机视觉数据标注AI平台

【产品介绍】 Landing AI是一家由人工智能领域的知名专家、Coursera联合创始人、前百度首席科学家、Google大脑创始负责人吴恩达博士创立的公司,旨在为各行各业提供先进的计算机视觉解决方案。 Landing AI的核心产品是LandingLens,一个基于云端的计算机视…

前端开发代码规范工具

规范化是前端工程化的一个重要部分。现在,有许多工具能够辅助我们实行代码的规范化,比如你一定知道的 ESLint 和 Prettier。 今天,来聊聊这些工具的工作原理和基本使用,了解它们是如何发挥作用的,以及如何更好地利用这些工具去规…

AI成功破译古老未知语言,人工智能技术开辟历史研究新时代

近年来,人工智能在各个领域取得了突飞猛进的发展,成为了当今社会讨论的热点。尽管有关其使用的争议不断,但AI技术在某些方面的作用已经不容忽视。 最近,以色列特拉维夫大学和阿里尔大学的研究者们联手研发了一款能够破译古老未知…

Nature:刘清华团队揭示调控睡眠时间的关键分子通路

导读 你能做到一周不睡觉吗?良好的睡眠对我们保证生活质量十分重要。不过,有些人每天只需睡4-6个小时,有些人则需要8个小时(可能还不够),这是什么原因导致的? 其实,这也是很多科学…

阿里云服务器镜像是什么意思?

阿里云服务器镜像是云服务器的装机盘,镜像是为云服务器安装操作系统的。云服务器镜像系统怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心…

怎样恢复删除的视频?这5个方法才是正确答案!

案例:怎样恢复删除的视频? 【我是个视频爱好者,平常会在电脑中存很多视频,但也经常会将很多视频误删,怎样恢复删除的视频呢?希望大家给我一些建议!】 在摄影摄像技术较发达的今天,…

cond conv 代码-思想

参考博客: 1 解析图示最清楚动态卷积之CondConv思想和代码实现_&永恒的星河&的博客-CSDN博客 2 知乎的解释,简洁明了CondConv代码解析 - 知乎 知乎提供code:External-Attention-pytorch/CondConv.py at master xmu-xiaoma666/Extern…

详解MySQL索引失效

目录 B树结构 测试数据 索引失效的情况 没有用到索引 违反左前缀原则 范围查询断索引 like需要分情况 结果数据超过半数 B树结构 索引失效的根本原因其实就是违反了B树的结构特性,查找的时候没办法在B树上继续走下去,所以首先我们来回顾一下B树…

进程控制(中)

目录: 1.status获取子进程退出的退出码和信号 2.不进行位操作方式获取子进程的退出码和信号 3.waitpid 第三个参数options ------------------------------------------------------------------------------------------------------------------------------- 1.…

工业4.0,为什么数字化转型这么难,上了ERP还要上MES

工业4.0时代,中国制造企业已经面临着与国际先进水平的差距,更多的企业在寻找新的发展道路,数字化转型是制造业企业转型升级的必由之路。但是,许多制造型企业由于在传统生产过程中,业务数据不能得到有效监控、生产过程数…

人脸修复增强调研

Real-ESRGAN 工程地址:https://github.com/xinntao/Real-ESRGAN 效果: 人脸增强部分,调用的GFPGAN. GFPGAN 工程地址:https://github.com/TencentARC/GFPGAN 论文效果: BasicSR-ESRGAN: 项目地址&a…

巨杉数据库荣获新睿之星,赋能大湾区技术与产业升级

巨杉数据库凭借多年深耕分布式数据库的技术积累和创新能力,于广州投资年会上荣获新睿之星奖项,该奖项不仅是对巨杉数据库的肯定,也充分肯定广州培育本土高新企业的发展成果。 4月18日,2023年第九届广州国际投资年会在广州白云国际…

2023年10大最佳「内容日历」软件工具

随随便便运行一个社交媒体策略就能成功,这几乎是不可能。你需要提前规划排期,收集资源并与他人合作,来创造出能吸引受众注意力的内容。 所有这些规划、研究和创意都需要一个地方汇总聚合,这就是内容日历软件的用武之地。 有了合…

C++ 多线程:实现一个功能完整的线程池

C 多线程(四):实现一个功能完整的线程池 今天我们来聊一聊异步编程的知识。在分布式系统中,一个功能完整的线程池类是一切代码的前提。 一个『合格』的线程池该具备哪些功能? 首先,很自然地想到『线程池类…

被嫌弃可视化太丑?这种可视化大屏搭建方法,分分钟让老板满意

在数据可视化中,使用频率最高的展览方式一定是地图可视化。基本上现有的大屏都是以地图作为主视图来呈现的,没有一幅地图放到大屏中央,已经不好意思给同行说明自己企业数据分析有多牛了。在地图可视化中,最炫酷的一定是3D可视化大…

家用洗地机有什么推荐的吗?家用洗地机哪款好

洗地机是创新、高效的清洁工具,其具有高性能的清洁能力和卓越的操作体验。与传统的清洁工具相比,洗地机可以迅速而彻底地打扫地面,降低清洁时间和人力成本,让我们在工作之余不用花费大量的时间和精力去打扫卫生,下面就…

TCP 协议和 UDP 协议 的优势和劣势

TCP 最核心的价值是提供了可靠性,而 UDP 最核心的价值是灵活,你几乎可以用它来做任何事情。例如:HTTP 协议 1.1 和 2.0 都基于 TCP,而到了 HTTP 3.0 就开始用 UDP 了。UDP 在数据传输、网络控制、音视频、Web 技术中,都…