nodejs搭建MQTT服务器

nodejs搭建MQTT服务器前言mqtt协议介绍一mqtt协议介绍二图片来自https://www.jianshu.com/p/9e74287e3b07正文安装nodejs下载安装即可。安装mqtt.js模块新建一个文件夹,打开cmd,npminstallmqtt–save,这里很有可能能会报错,百度一下就可以解决。安装好mqtt.js模块后,文件夹中会多两个文件出来。搭建服务器mqttser…

大家好,又见面了,我是你们的朋友全栈君。

前言

mqtt协议介绍一

mqtt协议介绍二

Vmsk2q.png

图片来自https://www.jianshu.com/p/9e74287e3b07

正文

安装nodejs

下载安装即可。

安装mqtt.js模块

新建一个文件夹,打开cmd,npm install mqtt --save,这里很有可能能会报错,百度一下就可以解决。

安装好mqtt.js模块后,文件夹中会多两个文件出来。

搭建服务器

mqttserver.js源码

var mosca = require('mosca');
//构建自带服务器
var MqttServer = new mosca.Server({ 
   
    port: 1883
});
//对服务器端口进行配置, 在此端口进行监听
MqttServer.on('clientConnected', function(client) { 
   
    //监听连接
    console.log('client connected', client.id);
});
/** * 监听MQTT主题消息 **/
MqttServer.on('published', function(packet, client) { 
   
    //当客户端有连接发布主题消息
    var topic = packet.topic;
    console.log(packet);
    switch (topic) { 
   
        case 'test':
            console.log('message-publish', packet.payload.toString());
            //MQTT转发主题消息
            //MqttServer.publish({ topic: 'other', payload: 'sssss' });
            break;
        case 'other':
            console.log('message-123', packet.payload.toString());
            break;
    }
});

MqttServer.on('ready', function() { 
   
    //当服务开启时
    console.log('mqtt is running...');
});

node mqttserver.js开启服务器

VmDdmD.png

服务器运行成功。

开启订阅

subclient.js源码

var mqtt = require('mqtt');  
var client2 = mqtt.connect("mqtt://127.0.0.1:1883");   //指定服务端地址和端口
  
client2.subscribe('test',{ 
   qos:1});//订阅主题为test的消息 
  
client2.on('message',function(top,message) { 
     
    console.log(message.toString());  
});  

node subclient.js开启订阅

开启发布

pubclient.js源码

var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://127.0.0.1'); //连接到服务端
//client.subscribe('presence');
var num = 0;
var qtt = { 
   }; //定义消息(可以为字符串、对象等)
qtt = 'helloworld';
setInterval(function() { 
    //3秒钟发送一次 消息到主题 SN69143809293670state 消息为helloworld
    client.publish('test', qtt, { 
    qos: 0, retain: true });  
}, 3000);

node pubclient.js开启发布


此时,会发现如下结果

服务器

[Vmrt4s.png

订阅方

VmrwvV.png

说明mqtt服务器搭建成功。

实验体会

讲一下MQTT一个通俗的理解。

MQTT服务器类似一个公告栏,里面张贴了各种广告。

张三跑过来说,凡是涉及足球的(/public/TEST/Soccer)的都发给自己(订阅)

第二天,李四过来贴广告了,主题是(/public/TEST/Soccer),发布的内容是“30号有比赛”

此时,公告栏(MQTT服务器)会自动发短信给张三,发送的信息为 “30号有比赛”。

实验流程分析

1、实验中,mqtt服务器上有两个主题的信息test和other

2、订阅方发布一个主题为test的订阅,当mqtt也会得到这个这个主题的信息时,就会发给订阅方

3、发布方发布一个主题为test的信息到mqtt服务器

4、当mqtt服务器得知与订阅方相匹配的订阅时,会把这个主题消息的内容发给订阅方

初学者,有问题请指正。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140754.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 深度置信网络matlab语言实现(tcc信念)

    【实例简介】深度信念网络,有代码,有实例,有数据。用于深度网络预训练。【实例截图】【核心代码】DBN代码`–DBN代码|–Readme.txt|–isir例子RBM||–adealdata.m||–amydata.mat||–apretrain.m||–checkrbmtrain.m||–grbmtrain.m||–iris….

  • 外键(FOREIGN KEY)

    外键(FOREIGN KEY)引子:把所有数据都存放于一张表的弊端  1、表的组织结构复杂不清晰  2、浪费空间  3、扩展性极差为了解决上述的问题,就需要用多张表来存放数据。表与表的记录之间存在着三种关系:一对多、多对多、一对一的关系。处理表之间关系问题就会利用到FOREIGNKEY多对一关系:寻找表与表之间的关系的套路  举例:雇员表:emp表  部门:dep表    part1:    …

  • 视觉里程计原理_视觉定位和里程计辅助定位

    视觉里程计原理_视觉定位和里程计辅助定位注意到位姿节点之间的变换并不是位姿,之前一直有误解;一般地;路标节点:也就是观测方程【数学形式下见】的观测值,也就是特征点的像素坐标[u,v],或者该帧相机坐标系下的3d坐标[x,y,z];位姿

  • Java基础语法(七)条件控制语句的骚操作

    Java基础语法(七)条件控制语句的骚操作

  • 2019最新三年php 面试题[通俗易懂]

    2019最新三年php 面试题[通俗易懂]什么是composer?以及composer是干什么用的?工作原理 PHP如何实现静态化 你了解设计模式吗?说下你最常用的设计模式 观察者模式是如何实现的?工厂模式是如何实现的?适配器模式是如何实现的?…… PHP的优化方案 说下你了解的session和cookie 如何实现不基于session和cookie的用户认证。 说下你目前框架所用到的核心概念 什么是CSRF攻击,X…

  • JDBC连接(Statement和PrepareStatement)「建议收藏」

    JDBC连接(Statement和PrepareStatement)「建议收藏」1.JDBC连接的连接步骤(Statement和PrepareStatement)(1)注册驱动(只做一次)(2)建立连接(Connection) (3)创建执行SQL的语句(Statement)(4)执行语句(5)处理执行结果(ResultSet)(6)释放资源1.1注册驱动(1)Class.forName(“com.mysql.jdbc.Drive

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号