Contents
  1. 1. 前言
  2. 2. 正文
    1. 2.1. 安装nodejs
    2. 2.2. 安装mqtt.js模块
    3. 2.3. 搭建服务器
    4. 2.4. 开启订阅
    5. 2.5. 开启发布
    6. 2.6. 实验体会

前言

物联网安全实践四

mqtt协议介绍一

mqtt协议介绍二

Vmsk2q.png

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

正文

安装nodejs

下载安装即可。

安装mqtt.js模块

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

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

搭建服务器

mqttserver.js源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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源码

1
2
3
4
5
6
7
8
9
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源码

1
2
3
4
5
6
7
8
9
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服务器得知与订阅方相匹配的订阅时,会把这个主题消息的内容发给订阅方

Contents
  1. 1. 前言
  2. 2. 正文
    1. 2.1. 安装nodejs
    2. 2.2. 安装mqtt.js模块
    3. 2.3. 搭建服务器
    4. 2.4. 开启订阅
    5. 2.5. 开启发布
    6. 2.6. 实验体会