前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何在Angular项目中使用MQTT

如何在Angular项目中使用MQTT

原创
作者头像
EMQ映云科技
发布于 2022-10-13 07:03:23
发布于 2022-10-13 07:03:23
2.6K00
代码可运行
举报
文章被收录于专栏:EMQ 物联网EMQ 物联网
运行总次数:0
代码可运行

前言

Angular 是一个基于 TypeScript 构建的开发平台。它包括一个基于组件的框架,用于构建可伸缩的 Web 应用;一组完美集成的库,涵盖路由、表单管理、客户端-服务器通信等各种功能;一套开发工具,可帮助用户开发、构建、测试和更新代码。

MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议。该协议提供了一对多的消息分发和应用程序的解耦,传输消耗小,可最大限度减少网络流量,同时具有三种不同消息服务质量等级,满足不同投递需求的优势。

本文将介绍如何在 Angular 项目中使用 MQTT 协议,实现客户端与 MQTT 服务器的连接、订阅、收发消息、取消订阅等功能。

项目初始化

新建项目

参考链接如下:使用 Angular CLI 创建 Angular 项目

示例:

代码语言:text
AI代码解释
复制
ng new my-app

安装 MQTT 客户端库

本次使用的是库为 ngx-mqtt,这个库不仅仅是 MQTT.js 的包装器,用于 angular >= 2。它使用 observables 并负责订阅处理和消息路由, ngx-mqtt 非常适合具有许多组件和许多订阅者的应用程序。

通过命令行安装 ngx-mqtt,可以使用 npm 或 yarn 命令(二者选一)

代码语言:text
AI代码解释
复制
 npm install ngx-mqtt --save
 yarn add ngx-mqtt

MQTT 的使用

连接 MQTT 服务器

本文将使用 EMQX 提供的免费公共 MQTT 服务器,该服务基于 MQTT 云服务器 - EMQX Cloud 创建。EMQX 是一款大规模分布式物联网 MQTT 消息服务器,可高效可靠连接海量物联网设备,实时处理分发消息与事件流数据,助力构建关键业务的物联网平台与应用。

服务器接入信息如下:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • WebSocket Port: 8083

连接关键代码:

代码语言:typescript
AI代码解释
复制
import {
  IMqttMessage,
  IMqttServiceOptions,
  MqttService,
  IPublishOptions,
} from 'ngx-mqtt';
import { IClientSubscribeOptions } from 'mqtt-browser';
import { Subscription } from 'rxjs';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  constructor(private _mqttService: MqttService) {
    this.client = this._mqttService;
  }
  private curSubscription: Subscription | undefined;
  connection = {
    hostname: 'broker.emqx.io',
    port: 8083,
    path: '/mqtt',
    clean: true, // 保留会话
    connectTimeout: 4000, // 超时时间
    reconnectPeriod: 4000, // 重连时间间隔
    // 认证信息
    clientId: 'mqttx_597046f4',
    username: 'emqx_test',
    password: 'emqx_test',
    protocol: 'ws',
    }
  subscription = {
    topic: 'topic/mqttx',
    qos: 0,
  };
  publish = {
    topic: 'topic/browser',
    qos: 0,
    payload: '{ "msg": "Hello, I am browser." }',
  };
  receiveNews = '';
  qosList = [
    { label: 0, value: 0 },
    { label: 1, value: 1 },
    { label: 2, value: 2 },
  ];
  client: MqttService | undefined;
  isConnection = false;
  subscribeSuccess = false;

  // 创建连接
  createConnection() {
    // 连接字符串, 通过协议指定使用的连接方式
    // ws 未加密 WebSocket 连接
    // wss 加密 WebSocket 连接
    // mqtt 未加密 TCP 连接
    // mqtts 加密 TCP 连接
    try {
      this.client?.connect(this.connection as IMqttServiceOptions)
    } catch (error) {
      console.log('mqtt.connect error', error);
    }
    this.client?.onConnect.subscribe(() => {
      this.isConnection = true
      console.log('Connection succeeded!');
    });
    this.client?.onError.subscribe((error: any) => {
      this.isConnection = false
      console.log('Connection failed', error);
    });
    this.client?.onMessage.subscribe((packet: any) => {
      this.receiveNews = this.receiveNews.concat(packet.payload.toString())
      console.log(`Received message ${packet.payload.toString()} from topic ${packet.topic}`)
    })
  }
}

订阅主题

连接 MQTT 服务器成功之后,调用当前 MQTT 实例的 subscribe 方法,传入 Topic 和 QoS 参数,即可订阅成功。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doSubscribe() {
  const { topic, qos } = this.subscription
  this.curSubscription = this.client?.observe(topic, { qos } as IClientSubscribeOptions).subscribe((message: IMqttMessage) => {
    this.subscribeSuccess = true
    console.log('Subscribe to topics res', message.payload.toString())
  })
}

取消订阅

unsubscribe 方法可以释放订阅持有的资源。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doUnSubscribe() {
  this.curSubscription?.unsubscribe()
  this.subscribeSuccess = false
}

消息发布

unsafePublish发布带有可选选项的主题的消息,如 QoS、Retain 等选项,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doPublish() {
  const { topic, qos, payload } = this.publish
  console.log(this.publish)
  this.client?.unsafePublish(topic, payload, { qos } as IPublishOptions)
}

断开连接

disconnect 断开与 MQTT 客户端的连接,传入参数 True 表示强制断开与 MQTT 客户端的连接。

代码语言:typescript
AI代码解释
复制
destroyConnection() {
  try {
    this.client?.disconnect(true)
    this.isConnection = false
    console.log('Successfully disconnected!')
  } catch (error: any) {
    console.log('Disconnect failed', error.toString())
  }
}

测试

我们使用 Angular 编写了如下简单的浏览器应用,该应用具备:创建连接、订阅主题、收发消息、取消订阅、断开连接等功能。

Angular MQTT Demo
Angular MQTT Demo

使用 MQTT 5.0 客户端工具 - MQTT X 作为另一个客户端进行消息收发测试。

MQTT 5.0 客户端工具
MQTT 5.0 客户端工具

在 MQTT X 发送第二条消息之前,在浏览器端进行取消订阅操作,浏览器端将不会收到 MQTT X 发送的后续消息。

总结

综上所述,我们实现了在 Angular 项目中创建 MQTT 连接,模拟了客户端与 MQTT 服务器进行订阅、收发消息、取消订阅以及断开连接的场景。

Angular 作为三大主流的前端框架之一,既能够在浏览器端使用,也能够在移动端使用,结合 MQTT 协议及 MQTT 物联网云服务 可以开发出很多有趣的应用,比如客服聊天系统或实时监控物联网设备信息的管理系统等。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-angular

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
物联网+mqtt+微信小程序(ESP8266+OneNET+小程序)
这篇文章主要了解ESP8266物联网小程序MQTT远程操控相关内容(ESP8266+OneNET+小程序)
xiao李
2024/04/08
2.2K0
物联网+mqtt+微信小程序(ESP8266+OneNET+小程序)
Java物联网开发(一) —— MQTT协议
官方文档传送门 mqtt官网 mqtt中文网 mqtt 3.1.1 英文文档 mqtt 5.0 英文文档 b站mqtt教程
时间静止不是简史
2021/08/12
6.9K0
Java物联网开发(一)  —— MQTT协议
mqtt服务器搭建(ubuntu)
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
全栈程序员站长
2022/09/06
7.6K0
mqtt服务器搭建(ubuntu)
mqtt协议实战(一)
最近项目中用到了mqtt的协议,今天特地抽时间学习了一下,搭建了一个基于nodejs的mqtt的服务。现在写一篇文章记录,分享给大家。
拿我格子衫来
2022/01/24
1.1K0
mqtt协议实战(一)
MQTT这么好玩不来自己搭建一个吗
之前写了一篇为什么智能硬件首选MQTT - 掘金,这次就来搭建一个自己的MQTT交互平台,实际体验一下,没有实战怎么能行。
Coder昊白
2023/11/22
9850
MQTT这么好玩不来自己搭建一个吗
一篇就够:uniapp-Mqtt系列问题详细攻略(解决掉线、真机调试错误等问题)
昨天搞了一天,我觉得新手可以参考我这篇文章思路,避免你和我一样踩坑,刚好去年的这几天也在搞mqtt,不过当时弄的是微信小程序,这次项目是uniapp,我想实现uniapp中的h5能够使用mqtt,转换成小程序后也能直接使用,后面成功了,但是也付出了点代价,接近弄了5个小时,一直在犹豫要不要发出来记录一下,后面还是妥协了,因为我怕下次我用到又继续像昨天那样, 本次解决了:
德宏大魔王
2023/08/08
3.3K0
一篇就够:uniapp-Mqtt系列问题详细攻略(解决掉线、真机调试错误等问题)
使用 WebSocket 客户端连接 MQTT 服务器
近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用。
杨奉武
2018/12/28
16.6K0
MQTT–入门「建议收藏」
 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
全栈程序员站长
2022/08/25
1K0
MQTT–入门「建议收藏」
【开源视频联动物联网平台】vertx写一个mqtt服务端
帐篷Li-物联网布道师
2024/03/20
2690
零基础教你自建MQTT服务器并实现双向通讯
随着物联网技术的快速发展,MQTT(Message Queuing Telemetry Transport)消息队列遥测传输协议,作为一种轻量级的通讯协议,被广泛应用于物联网设备之间的通讯。
Tinywan
2024/06/04
1.7K0
零基础教你自建MQTT服务器并实现双向通讯
mqtt实现自动监听服务器消息
  本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论。    首先需求是:多系统对接进行消息实时传递。    安装好mqtt:    npm install mqtt --save    本地服务(可以直接配在java中):这里采用mosca   安装好mosca:  npm install mosca --save var mosca=reqire('mosca'); var mqttServer=new mosca.Server({po
用户2145235
2018/05/18
3.2K0
MQTT 协议基本介绍
MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。
sunsky
2021/06/09
3.7K0
MQTT 协议基本介绍
使用 MQTTnet 实现 MQTT 通信示例
MQTT 开源库还有 MqttDotNet、nMQTT、M2MQTT 等,不过这几个里面,目前star最多的还是MQTTnet(编辑时间2018.5.9)。
全栈程序员站长
2022/09/12
1.7K0
[MQTT] 5.0新特性
MQTT 5.0 协议相比 MQTT 3.1.1 增加了很多属性,这些属性分布于报文的可变头部 ( Variable Header ) 和有效载荷 ( Payload ) 中。
科控物联
2022/03/29
2K0
[MQTT] 5.0新特性
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT?
架构师精进
2023/10/06
18.6K2
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
MQTT 协议入门:基础知识和快速教程
本文是 MQTT 协议的入门指南,提供了实用的代码示例。物联网和 MQTT 的初学者可以通过本文掌握 MQTT 的基本概念,快速开启 MQTT 服务和应用的开发。
EMQ映云科技
2023/06/27
1.3K0
MQTT 协议入门:基础知识和快速教程
Java使用EMQX实现MQTT通信
在上一篇文章 《Java使用modbus4j实现ModbusTCP通信》 中我们介绍了Java与Modbus协议的TCP通信,本文讲解一下如何用Java实现对当下最流行的物联网协议之一的MQTT协议进行通信。
Jensen_97
2023/07/20
1.5K0
Java使用EMQX实现MQTT通信
如何在 Java 中使用 MQTT
MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。
EMQ映云科技
2022/08/30
2.2K0
常见MQTT服务器搭建与试用(亲测通过)[通俗易懂]
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT现在主要用于即时通讯,物联网M2M,物联网采集等。本文就社区上常见的开源MQTT服务器在常见操作系统上的搭建做详细介绍。目前一些开源MQTT服务中间件有:
全栈程序员站长
2022/08/26
10.1K0
常见MQTT服务器搭建与试用(亲测通过)[通俗易懂]
如何在 Django 项目中使用 MQTT
MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。
EMQ映云科技
2022/10/24
2.1K0
相关推荐
物联网+mqtt+微信小程序(ESP8266+OneNET+小程序)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文