从物联网需求到MQTT协议(中)|学习笔记

简介: 快速学习从物联网需求到MQTT协议(中)

开发者学堂课程【大咖带你聊物联网:从物联网需求到MQTT协议(中)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/571/detail/7778


从物联网需求到 MQTT 协议(中)

一、 HTTP 协议

二、理解 HTTP 协议

三、HTTP 协议产生背景

四、实例感受 HTTP 协议的过程和特点

五、HTTP 的访问的流程


一、HTTP 协议

HTTP 协议 ( HyperText Transfer Protocol ,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 wwW 文件都必须遵守这个标准。

HTTP 是一个基于 TCP/IP 通信协议来传递数据( HTML 文件,图片文件,查询结果等)。

应用层:HTTP、TLS、SSL

传输层:TCP

网络层:IP

网络接口层:数据链路层

其实网络是一个 HTTP 协议为主,HTTP 协议主要是为了传输网页,HTTP 协议的全称叫做超文本传输协议,那所谓超文本就是文本可以通过点击链接链接到其它的文本或者其它的网页上,HTTP 协议是网上最流行最为广泛的网络咨询,所有的 WWW 的文件都必须遵循这个标准 HTTP 协议,它是一个应用层的协议,而它是基于 TCPIP 的通讯协议进行传输的,所以它是一个应用层的协议,HTTP 的协议发展也很多年了,所以在 HTTP 协议经常可以看到 HTTPS,HTTPS 是对 HTTP 进行加密,同时也有 HTTPR 的这个后续衍生的这个协议。那这些协议都是在应用层的它是在 TCPIP 包之上。

HTTP 协议有很多的特点,它的特点呢,都是为了互联网上免费了浏览网页设计的,所以它这些特点是更适合去浏览网页。


二、理解 HTTP 协议

1、HTTP 是单向的。客户端必须发起连接。在 loT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。

第一个特点,这里问题的需求就是 HTTP 是单向的,它的通讯方式是浏览器进行一个请求到外部服务器那个服务器给一个响应,这个方式其实跟单片机里面常说的一个彩信方式是比较像相近的,它请求的时候是发一个 HTTP 的协议,这一点自然包含了 url ,就是这个网络访问的地址,而当接收到这个请求之后,服务器才会响应一个请求,所以它是一个单向的单向发起,只会从浏览器端进行发起的请求,到外部服务器要普及才会第一个响应。

比如这里我们有一个网页是我们的微信公众号的一个后台,当不去刷新它的时候,这里的数据其实它都不会自己去更新,也就是这个浏览器当不去发起一个访问请求的时候,服务器不会主动推送数据过来。

在网址这里进行了一个刷新,刷新之后就会看到这里的浏览数据进行了一个变更,就是这里发去请求了之后,回传回来的数据,在这里就是服务器给的响应在这里发生了变更。如果不进行刷新的话,数据是不会进行变更的。

有一些情况可能会主动去提示需要去更新,或者是需要去刷新,或者比如说一些网页实现浏览器的一些即时通信工具,它是怎么实现刷新的,可能选用了其它的通讯协议,或者是在类似于基于这样新的之外运用了其它比如 web shop 的这样的协议进行了刷新。

但是纯粹的 HTTP 协议是如果你不去刷新,它是不会主动去刷新的,但是也可以在网页设计的时候做一个定期的刷新的设计。

2、HTTP 是一种1对1协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 loT 应用程序中的一种常见使用情况。

一个提议客户端发送请求之后,服务器进行响应,客户端对服务器进行访问的时候是相对独立的,跟另外的客户端访问它是不相关的一件事情,但是物联网的需求设备之间是需要进行信息进行互通的,比如说我们的发布者和订阅者进行了数据的互通,但是网页访问的时候实际上它是可以简单的看成是多个阅读者去这个图书馆进行阅读的一个关系,相同的一本书可以多个阅读者,同时把一个网页同时打开,它们进行一个阅读。

比如说登录阿里云的时候,这里有一个超时登录,登录的时候,需要带登录数据。

点击登录之后是传给了外部服务器,外部服务器进行处理,就是刚刚相当于这个 PPT 里面把一个终端对服务器进行了启动服务器的响应,但是在这个请求里面它它是带了自己的数据给服务器,但是服务器是很难具备把它带过去的数据进行分发,如果用另外一个网页去访问相同的地址的话,实际上是很难获取其它的中断,另外一个浏览器去访问这个服务器带过去的这个数据,因为 HTTP 协议主要是这个请求跟响应的这么一个过程,而且请求的数据如果是携带客户端的数据,这个数据量是非常少的协议。

3、HTTP 是一种有许多标头和规则的重量级协议。http 协议比较重,url、head、content 都要携带很多内容,不适合传输能力比较弱的设备。它不适合低功耗、低处理能力、低带宽的网络。

它的协议是一个重量级的协议,它带有了很多的标图,还有规则也比较复杂,那些协议它比较重主要体现在它的协议携带的内容都很多,虽然包结构并不是很复杂,但是包里面包含的内容,每次访问的时候,其实都它的所需要的字符数是比较多的。比如访问一个地址的时候,那个UI而往往都会很长。那这些字符串如果由单片机去处理的话,就会变得非常消耗资源。

同时,HTTP 协议它的传输的过程是建立连接之后传完了之后就会关闭连接,所以如果传输一次消息,它的开销都很大,那它每次建立连接的过程的开销会在反复使用的过程中会叠加,这样每一次进行客户端与服务器通信的时候,开销都非常大。

客户端与服务器的 Http 协议过程是客户端建立连接并发送请求信息,服务器发送响应信息,客户端关闭与服务器的链接。


三、HTTP 协议产生背景

看到在互联网中间的一些数据,如果 HTTP 去实现这个的话,就有一点像一个访问窗口,访问的时候有中断方式和查询方式,如果强行的用 HTTP 去实现这个就有一点像查询方式去获取。结果这个代价就会非常大,开销也非常大,最后并不能达到预期的一个效果。所以在互联网时代到来之后,产生一个新的协议更符合这样一个网络结构和网络形态,需完成物联网和性的一个需求,这时候HTTP的协议就诞生了。


四、实例感受 HTTP 协议的过程和特点

服务器有一个配置文件,这个配置文件就是说明用浏览器来访问这个服务器的时候,服务器作为一个外部服务器,作为一个页面的服务器,怎样去提供这个服务。

首先进入 ETC 文件夹,可以直接切换 nginxx 的,里面有一个 nginx.CONS,把它打开看一下这个服务器的 nginx 配置是在这个文件,这个配置文件决定了什么?

首先监听80端口就是一个默认的这个服务器。第二个它的根目录就当访问着一个域名或者这个 IP 地址的时候,当访问没有没有后续的,没有后缀的,举个例子,比如说阿里云,当我访问这个地址的时候,它所呈现的一个服务器的存储的位置,被 ROOT 行指定。

服务器的地址里面有 404.html  50x.html  index.html nginx-logo.png poweredby.png

访问这个地址的时候,就呈现了 HTML 文件,其中 HTML 文件指定了两个图片,它的访问过程,可以按F12点在works,那访问的过程的第一个返回来,这个强行发行一下,第一个返回了200,回答一个文件,这个文件就是HTML文件,点这个内容可以看到两个图片还有没找到的图标,404表示名字找到这三个属性都已经找到了文档图片,这两个图片都是包含在 Index 的,这就是一个访问的过程。


五、HTTP 的访问的流程

用一个抓包工具,可以自己在网上去下载,可以查看这个工具的使用方法,网上都很多,打开这个工具之后,就可以利用这个工具来监控开放接口,就是这样一个流程,首先这里现在是 WiFi  接入到选中的 WiFi 接口,需要关心想监控的这些内容,这里写一个原服务器 SRZ 原服务器的 IP 地址就是刚刚建的这个服务器的地址,配好了 IP 地址后点击这个按钮选择不保存,然后就在监控这个 IP 地址,然后强制刷新一下。

就找到了很多包,其实关掉那个占内存,可以看到发出的请求,右键点击,最终选择 HTTP6 ,这里就是把所有的跟这个服务器交互的 HTTP 都找到了,第一部分就是 HTTP 协议的一个请求,这里面有前面我说过的帧结构,请求协议许多类型协议类型 IP 地址等等,然后返回的内容,第一部分是 HTTP 返回的包,表示200已经找到,然后当前的服务器的版本一堆信息,然后就是返回的内容,下面的这个内容,可以看到跟网页上的 HTML 内容是保持一致的。

所以这个过程呢,首先是请求响应发送请求消息,然后一个关闭连接就直接就完成了这么一个过程,看不到关闭连接因为它自动就切断了。

第二个,从大量的篇幅来看申请一个很简单,如果是申请一个很简单的数据,这里的文件是比较大,比如说更换到一个文件,把这个删除然后按照 HTML 的格式写一个最简单的文件,定义成 Hello World ,然后保存,然后将这个文件这个文件上传到刚刚的文件夹,这个文件夹里面已经有 Index ,那再通过查询,然后再访问这个 IP 地址,就会出现写进去的 Hello World 。

再跟踪一下这个最简单的 HTML 返回的过程,选择先找到地址,现在跟踪一下这个IP地址数据流,强制刷新一下,所以之后可以看到一个 HTML2 返回的200,直接跟踪的 HTTP 可以看到现在返回的过程返回的内容就是刚刚写的这个内容。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
14天前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
22 2
|
17天前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
37 0
|
27天前
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
42 0
|
2月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
3天前
|
消息中间件
手撸MQ消息队列——循环数组
队列是一种常用的数据结构,类似于栈,但采用先进先出(FIFO)的原则。生活中常见的排队场景就是队列的应用实例。在数据结构中,队列通常用数组实现,包括入队(队尾插入元素)和出队(队头移除元素)两种基本操作。本文介绍了如何用数组实现队列,包括定义数组长度、维护队头和队尾下标(front 和 tail),并通过取模运算解决下标越界问题。此外,还讨论了队列的空与满状态判断,以及并发和等待机制的实现。通过示例代码展示了队列的基本操作及优化方法,确保多线程环境下的正确性和高效性。
9 0
手撸MQ消息队列——循环数组
|
29天前
|
消息中间件 存储 Java
【揭秘】RocketMQ内部运作大揭秘:一探究竟,原来消息队列是这样工作的!
【8月更文挑战第19天】RocketMQ是一款高性能、高可用的消息中间件,在分布式系统中至关重要。它采用发布/订阅模式,支持高吞吐量的消息传递。核心组件包括管理元数据的NameServer、存储消息的Broker以及Producer和Consumer。RocketMQ支持发布/订阅与点对点两种模型,并具备复杂的消息持久化和路由机制。通过Java API示例,可轻松实现消息的发送与接收。RocketMQ凭借其出色的特性和可靠性,成为大型分布式系统首选的消息解决方案。
49 5
|
1月前
|
消息中间件 存储 缓存
一个用过消息队列的人,竟不知为何要用 MQ?
一个用过消息队列的人,竟不知为何要用 MQ?
74 1
|
2月前
|
消息中间件 开发工具 RocketMQ
消息队列 MQ使用问题之一直连接master失败,是什么原因
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 Prometheus 监控
消息队列 MQ使用问题之如何将旧集群的store目录迁移到新集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

相关产品

  • 物联网平台