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