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

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

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

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

  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.mfbz.cn/a/19391.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生概念和技术】1.2 云原生技术概括(上)

如果想了解或者学习云原生的友友们,欢迎订阅哦~🤗,目前一周三更,努力码字中🧑‍💻…目前第一章是一些介绍和概念性的知识,可以先在脑海里有一个知识的轮廓,从第二章开始就…

AUTOSAR入门

简介 AUTOSAR(AUTomotive Open System ARchitecture)是一种汽车软件架构标准,由德国大陆、博世、宝马等汽车及零部件制造商共同发起,拥有广泛的行业参与。其目标是为了解决汽车电子和软件系统日益复杂的问题,提高可重…

打工人使用ChatGPT的一天!

众所周知,ChatGPT 自去年OpenAI 推出以来,这款 AI 聊天机器人可以说迅速成为了 AI 界的「当红炸子鸡」 作为一名资深的打工人👷🏻‍♂️,我们应该怎样利用ChatGPT提高工作效率呢?今天给大家介绍下打工人使…

关于Kerberos认证的一些攻击手法学习总结

Kerberos认证流程 前言 本文主要分享最近学习的关于域内Kerberos认证的一些攻击手法,以自我的理解为主,从原理理解切入到基本工具利用来阐述,个人的理解分析较为啰嗦,嫌太兀长的可以跳着看就好,还请各位谅解。如有错误…

第三十二章 React路由组件的简单使用

1、NavLink的使用 一个特殊版本的 Link&#xff0c;当它与当前 URL 匹配时&#xff0c;为其渲染元素添加样式属性 <NavLink className"list-group-item" to"/home">Home</NavLink> <NavLink className"list-group-item" to&quo…

JVM运行时数据区

Java和C的区别&#xff0c;体现在自动内存分配和垃圾收集技术。 JVM在执行Java程序时&#xff0c;会将它管理的内存分为若干个不同的数据区域。 这些区域有各自的作用范围以及生命周期&#xff1a; 线程私有的区域&#xff0c;随着用户线程的启动和结束而建立和销毁。线程共…

2023网络安全十大顶级工具

从事网络安全工作&#xff0c;手上自然离不开一些重要的网络安全工具。今天&#xff0c;分享10大网络安全工具。 一、Kali Linux Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这…

MySQL基础(二十二)逻辑架构

1.逻辑架构剖析 1.1 第1层&#xff1a;连接层 系统&#xff08;客户端&#xff09;访问MySQL服务器前&#xff0c;做的第一件事就是建立TCP连接。 经过三次握手建立连接成功后&#xff0c;MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。 用户名或密码不对&#…

Redis 五大基本数据类型常见命令

一、redis中的常见数据结构 Redis共有5种常见数据结构&#xff0c;分别字符串&#xff08;STRING)、列表&#xff08;LIST&#xff09;、集合&#xff08;SET)、散列&#xff08;HASH&#xff09;、有序集合&#xff08;ZSET)。 二、redis中五大基本数据类型介绍 字符串(Str…

尚硅谷JUC

文章目录 1. 什么是JUC1.1 JUC简介1.2 进程和线程基本概念2.1 Synchronized2.1.1 Synchronized关键字2.1.2 synchronized实现三个线程卖30张票 2.2 Lock2.2.1 什么是Lock2.2.2 使用Lock实现买票功能2.2.3 两者的区别 3. 线程间通信及定制化通信3.1 使用synchronized实现线程之间…

Hive语言

一、Hive的DDL语言&#xff08;数据库、数据表的增删改查操作) 二、Hive的DQL语言&#xff08;数据库查询语言&#xff09; 2.1Hive七子句 聚合函数&#xff1a;count()、sum()、max()、min()、avg()可以单独使用。(缩写&#xff1a;cs mm a) 2.1.1 分区查询与分区裁剪 SELEC…

女生学习软件测试怎么样?

在IT技术行业&#xff0c;女生学习还是有很大优势的。女生相较于男生更有耐心&#xff0c;包容性强&#xff0c;心思细腻&#xff0c;对细节把控更好&#xff0c;同时还能帮助团队男女平衡&#xff0c;活跃气氛。 编程是一个只要你肯学习就会有回报的行业&#xff0c;不论男生…

ResourceManager HA 原理

简介 为了解决 Yarn 中 ResourceManager 的单点故障问题&#xff0c;在 Hadoop 2.4 中新增了 ResourceManager HA 的能力&#xff0c; 该文章基于 Hadoop 3.1.1 进行讲解。 1.1. 名词定义 全称简称备注ResourceManagerRmZookeeperZK ResourceManager Ha 架构 ResourceMana…

前端工程化 搭建私有组件库 组件从开发到发布私有npm仓库的全过程

前言 基于Vue3.0 TS的组件从开发组件库到发布私有npm仓库的全过程 环境 这里列出本文所使用的环境版本 vue 3.0 vue/cli 4.5.9 nodeJs 14.15.1 npm 6.14.8 vue --version vue/cli 4.5.9 npm -v 6.14.8 node -v v14.15.1 步骤 创建项目 使用 vue-cli 创建一个 vue3 项目&a…

mysql的高级查询语句

1.本文前言 数据库是用来存储数据&#xff0c;更新&#xff0c;查询数据的工具&#xff0c;而查询数据是一个数据库最为核心的功能&#xff0c;数据库是用来承载信息&#xff0c;而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查…

C++类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.1构造函数的概念 2.2构造函数的重载 2.3默认构造函数 2.4总结 3.析构函数 3.1析构函数的概念 3.2编译器自动生成的析构函数会做那些事情呢&#xff1f; 3.3析构函数的析构顺序 4.拷贝构造函数&#xff08;复制构造函数&am…

用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力

用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力 一、ChatGPT产生文案二、腾讯智影网站三、选择一个2D数字人四、粘贴文本五、编辑自定义&#xff0c;合成六、资源七、其他数字人平台推荐八、生成视频预览 本教程收集于&#xff1a;AIGC从入门到精通教程汇总 操作指引 Ch…

哪个牌子的电视盒子好用?罗鹏数码盘点2023电视盒子排名

电视机资源少、卡顿&#xff0c;配置不足的时候只需要安装一台电视盒子就可以解决这些问题&#xff0c;不需要花费大价钱更换电视机。那么&#xff0c;你知道哪个牌子的电视盒子好用吗&#xff1f;今天罗鹏就来详细聊聊这个话题&#xff0c;分享2023最新电视盒子排名。 一&…

gitlab服务器发送邮件配置

1.修改gitlab的配置文件&#xff1a; vim /etc/gitlab/gitlab.rb 这里具体的gitlab.rb文件所在路径需要根据实际的来 找到如下图所示的部分&#xff0c;放开注释&#xff0c;修改配置&#xff0c;此处我用的发件邮箱是QQ邮箱&#xff0c;所以域名配置都是qq.com&#xff0c;…

图表控件Stimulsoft 2023.2 带来极致深色主题, 一起来看看还有哪些亮点?

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…