mqtt 服务器与客户端通讯

mqtt 服务器与客户端通讯。

服务器端

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* Created by niyl on 2016/1/13.
*/
 
var mosca = require('mosca');
var MqttServer = new mosca.Server({
port: 8000
});
/**
* 验证方法
*
**/
var authenticate = function(client, username, password, callback) {
//var authorized = (username.toString() === '18FE34F48379-DC' && password.toString() === '666666');
var authorized = (password.toString() === '666666');
if (authorized){
//存储设备类型
client.type = username.toString().split('-')[1];
}
callback(null, authorized);
}
 
 
//
 
MqttServer.on('clientConnected', function(client){
console.log('client connected', client.id);
});
 
/**
* 监听MQTT主题消息
**/
MqttServer.on('published', function(packet, client) {
var topic = packet.topic;
// console.log('message-arrived--->','topic ='+topic+',message = '+ packet.payload.toString());
switch(topic){
case 'pubMsg':
console.log('message-publish', packet.payload.toString());
//MQTT转发主题消息
MqttServer.publish({topic: 'other', payload: 'hello'});
//发送消息NODEJS
console.log('HD: ');
//发送socket.io消息
//io.sockets.socket(YHSocketMap.get('1000')).emit('subState', packet);
break;
case 'other':
console.log('message-123', packet.payload.toString());
break;
case 'order':
console.log('order', packet.payload.toString());
 
break;
case 'test':
console.log('test', packet.payload.toString());
break;
}
 
 
});
 
MqttServer.on('ready', function(){
console.log('mqtt is running...');
//MqttServer.authenticate = authenticate;
});



客户端程序

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
34
35
36
37
38
39
40
41
42
43
44
var mqtt = require('mqtt');
 
 
var client = mqtt.createClient(8000, 'localhost',{clientId:'1',clean:false});
//向服务器订阅一个主题
client.subscribe('other',{qos:1});
client.subscribe('test',{qos:1});
//当消息到达时
var yy=0;
var ww=0;
client.on('message', function (topic, message) {
var tt=(message.toString());
console.log(tt);
switch(tt)
{
case 'redd' :
ww++;
console.log(10000-ww);
break;
case 'hello' :
yy++;
console.log(yy);
break;
}
 
});
// PUBLISH-发布消息
var num=0;
setInterval(function (){
client.publish('order', ' ' + (num++),{qos:1, retain: true});
console.log("num="+num);
}, 5000);
setInterval(function(){
client.publish('pubMsg', 'send ' );
// console.log("PubMsg");
},10000);
setInterval(function(){
client.publish('test', 'redd' );
// console.log("test");
},20000);
 
 
var start=Date.now();
console.log("服务端"+start);
posted @ 2017-03-26 17:35  丁培飞  阅读(549)  评论(0编辑  收藏  举报