mqtt 服务器与客户端通讯

mqtt 服务器与客户端通讯。

服务器端

/**
* 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;
});



客户端程序

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);