angular项目实现mqtt的订阅与发布 ngx-mqtt
angular项目实现mqtt的订阅与发布
如果要写一个exe可执行文件,可以使用angular编写,然后使用electron打包成一个exe文件。
https://github.com/maximegris/angular-electron

我们可以使用现成的angular链接mqtt的插件实现订阅和发布——ngx-mqtt
https://github.com/sclausen/ngx-mqtt
安装 ngx-mqtt
首先在angular项目中安装 ngx-mqtt
npm install ngx-mqtt --save
配置mqtt服务器
然后需要在app.module.ts或者使用mqtt的组件中配置mqtt服务器信息。
import {
IMqttMessage,
MqttModule,
IMqttServiceOptions
} from 'ngx-mqtt';
export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
hostname: '192.168.1.123', // mqtt 服务器ip
port: 8083, // mqtt 服务器端口
path: '/mqtt'
};
@NgModule({
declarations: [HomeComponent],
imports: [CommonModule, FormsModule, SharedModule, HomeRoutingModule, MqttModule.forRoot(MQTT_SERVICE_OPTIONS)]
})
在需要的组件中使用ngx-mqtt订阅和发布消息。
首先引入
import {Subscription} from 'rxjs';
import {IMqttMessage, MqttService} from 'ngx-mqtt';
构造函数中注入依赖
constructor(private _mqttService: MqttService) {
// ...
}
订阅mqtt消息
this.subscription = this._mqttService.observe('my/topic').subscribe((message: IMqttMessage) => {
console.log(message.payload.toString());
});
其中 this._mqttService.observe(“ 这里面是要订阅的主题——topic ”),回调函数 message 为订阅后,发布者发布相关主题数据时收到的数据。
发布消息
this._mqttService.unsafePublish(topicText, messageText, {qos: 1, retain: true});
topicText:是发布的主题(topic)
messageText:是发布的内容(payload)
{qos: 1, retain: true}
retain参数:
当我们使用MQTT客户端发布消息(PUBLISH)时,如果将RETAIN标志位设置为true,那么MQTT服务器会将最近收到的一条RETAIN标志位为true的消息保存在服务器端(内存或文件),例如开启系统,查看设备的开关状态,我们可以获取上一次设备的状态直接设置开关的开关状态,使开关和设备的真实状态对应起来。
qos 参数:
- QOS0不可靠,因此适合大量数据的传输,因为很大量的数据,完全避免不丢包是很难的,网络环境、现实环境什么的。想要保证的话,大量的数据,一般是要做断点续传。而且小编的经验,像类似 “轮询” 这样不断地得到一些检测数据,这种数据,中间丢几包是基本不会影响业务的。
- QOS1可靠,一般的场景够用,因为总能接到数据嘛。缺点就是 “可能造成” 1条数据,接了多次。
- QOS2严格可靠,保证相同的消息只接收一条,(请稍微构思一下内部的实现…虽然不复杂,但要一定的流程来保证的,对吧),在每一次通讯都这样执行的话,势必会造成性能的考验,因此小编对QOS2的意见是 “如非必要,慎用,特别是个人/小团队,没有那么多资金租用特别好的服务器”。
然后根据自己的具体逻辑,就可以实现angular mqtt消息的订阅和转发了!
连接mqtt服务器
配置好 mqtt 服务器后,运行会自动连接设置好的mqtt服务器,直接进行订阅或者发布消息就可以。
export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
hostname: '192.168.1.123', // mqtt 服务器ip
port: 8083, // mqtt 服务器端口
path: '/mqtt'
};
但是!BUT!
如果运行过程中需要切换mqtt服务器,因此需要重新配置mqtt服务器,然后重新连接。
首先在界面引进配置mqtt的参数
import {MQTT_SERVICE_OPTIONS} from './home.module';
然后重新配置一下连接mqtt服务器的参数
MQTT_SERVICE_OPTIONS.hostname = "这个地方填修改的mqtt服务器ip";
MQTT_SERVICE_OPTIONS.port = Number("这个地方填写修改的mqtt服务器的端口");
// 如果需要其他的配置自己添加修改
配置信息修改完成,重新连接
this._mqttService.connect(MQTT_SERVICE_OPTIONS);
angular项目实现mqtt的订阅与发布 ngx-mqtt的更多相关文章
- Angular 个人深究(二)【发布与订阅】
Angular 个人深究(二)[发布与订阅] 1. 再入正题之前,首先说明下[ 发布与订阅模式](也叫观察者模式) 1) 定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个 ...
- .net core service && angular项目 iis发布
项目结构 .net core 后端服务站点 angular 前端页面站点 项目模板来自于abp或者52abp .net core 后端服务站点发布到IIS 发布报错 .Net Core使用IIS部署出 ...
- 我在生产项目里是如何使用Redis发布订阅的?(一)使用场景
转载请注明出处! 导语 Redis是我们很常用的一款nosql数据库产品,我们通常会用Redis来配合关系型数据库一起使用,弥补关系型数据库的不足. 其中,Redis的发布订阅功能也是它的一大亮点.虽 ...
- spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版
前言 基于之前两篇(<spring boot高性能实现二维码扫码登录(上)——单服务器版>和<spring boot高性能实现二维码扫码登录(中)——Redis版>)的基础, ...
- VB.net Wcf事件广播(订阅、发布)
这篇东西原写在csdn.net上,最近新开通了博客想把零散在各处的都转移到一处. 一.源起 学WCF有一段时间了,可是无论是微软的WebCast还是其他网上的教程,亦或我购买的几本书中,都没有怎么 ...
- 【C#】Event事件的订阅和发布
学习笔记:学习了委托和事件的用法.事件是一种特殊的委托,记录下事件从订阅到发布的流程. 学习资料源于视频:http://www.maiziedu.com/course/510-6891/ 新建一个De ...
- MQTT协议笔记之发布流程
MQTT协议笔记之发布流程 前言 这次要讲到客户端/服务器的发布消息行为,与PUBLISH相关的消息类型,会在这里看到. PUBLISH 客户端发布消息经由服务器分发到所有对应的订阅者那里.一个订阅者 ...
- Python实现MQTT接收订阅数据
一.背景 目前MQTT的标准组织官网:http://www.mqtt.org,里面列出了很多支持的软件相关资源. 一个轻量级的MQTT服务器是:http://www.mosquitto.org,可以运 ...
- Angular入门,开发环境搭建,使用Angular CLI创建你的第一个Angular项目
前言: 最近一直在使用阿里的NG-ZORRO(Angular组件库)开发公司后端的管理系统,写了一段时间的Angular以后发现对于我们.NET后端开发而言真是非常的友善.因此这篇文章主要是对这段时间 ...
随机推荐
- Time series data mining
from here 论文Timeseries data mining(2012)中提出:时间序列数据挖掘包括7个基本任务和3个基础问题: 7 tasks: query by content clust ...
- 刷题22. Generate Parentheses
一.题目说明 这个题目是22. Generate Parentheses,简单来说,输入一个数字n,输出n对匹配的小括号. 简单考虑了一下,n=0,输出"";n=1,输出" ...
- ECMAScript基本对象——Boolean对象
1.创建 var myBoolean=new Boolean(); 2.方法 toString()把布尔值转换为字符串,并返回结果 valueOf()返回 Boolean 对象的原始值. 3.属性 1 ...
- Windows新建域时 administrator账户密码不符合要求解决办法~!
解决方法 在cmd 命令行中 输入 net user administrator /passwordreq:yes
- 牛客练习赛53 B题调和级数
https://ac.nowcoder.com/acm/contest/1114/B 这题时间卡的比较死,多了一个快速幂的logn就过不了这题. #include<bits/stdc++.h&g ...
- Hbase出现ServerNotRunningYetException的解决方案(退出hadoop的安全模式)
退出安全模式 ./hadoop dfsadmin -safemode leave 然后出现 safemode off就成功了
- 修复ThinkPHP导出excel数字过大时显示为科学记数法
修复ThinkPHP导出excel数字过大时显示为科学记数法,这种显示对于查看的用户来说是及其不友好的.所以,我们要使其转化为正常的数字串! 我在google 的过程中,查了一些资料.其中 1).// ...
- nginx配置https域名
nginx安装配置支持https和配置https域名 yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-de ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
- Hog实例
1.计算Hog的特征得维度: #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2 ...