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后端开发而言真是非常的友善.因此这篇文章主要是对这段时间 ...
随机推荐
- centos8 samba
安装dnf install -y samba samba-client开机启动systemctl enable smb立即启动systemctl start smb防火墙放行firewall-cmd ...
- EF Code-First(Oracle)通过Migration来更新数据库的表的字段
关于Oracle中使用Entity Framework 6.x Code-First方式开发,请参考博客(菩提树下的杨过)https://www.cnblogs.com/yjmyzz/p/how-to ...
- vue.js父组件引入子组件,父组件向子组件传值
先看看目录结构app.vue为父组件,components里面的文件为子组件 下面这张图是父组件app.vue中的内容 下面这张图是子组件student.vue中的内容 这样父组件中的sdt数据就传入 ...
- 合理使用Android提供的Annotation来提高代码的质量
概述 Java语言提供了Annotation的机制,让描述性的元数据能够和代码共存.通常我们可以利用Annotation,来做一些标志性的说明.然而Annotation必须和相应的解析工具一起才能工作 ...
- Android 基础知识 -- Intent
Intent (意图) Android通信的桥梁,可以通过Intent启动Activity , Service , 发送指定广播到Receiver <1> 启动Activity : sta ...
- php文件上传与下载(附封装好的函数文件)
单文件上传前端页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 重新机兵回归(MMR)
重新机兵回归记录 S/L法 Save / Load 法 . 在关键战斗前,先save一把 , 在结算奖励后如果奖励不好 , 再重新load再来过 . 比如说拿红牡丹等 . 还可以在逃跑时用此法 . 随 ...
- linux基础之CnetOS安装
CentOS启动流程 POST-->boot sequence(bios)--> bootloader(mbr)-->kernel(ramdisk)-->rootfs(ro)- ...
- 图片,base64 互转
import sun.misc.BASE64Decoder; import java.io.FileOutputStream; import java.io.OutputStream; /** * @ ...
- goland设置go module
goland版本2019.3.2 go版本1.14 网上一大堆乱七八糟的什么破文章,讲了半天都没讲清这个go module怎么实际运用,真滴烦躁,一giao我哩giaogiao!!!!! 这边我直接介 ...