2015-10-18 134 views
0

我正在使用socket.io,node.js和node.js MQTT客户端连接到从HTMLS页面在A-MQ上运行的代理。我可以成功连接到代理并订阅我需要的主题,但我从来没有从主题中收到任何消息,即使有几个消息被排队。未使用node.js MQTT客户端收到的消息使用socket.io

这里是我的代码:

subscribe.js

var sys = require('sys'); 
var net = require('net'); 
var mqtt = require('mqtt'); 

var io = require('socket.io').listen(5000); 
io.set('origins', '*:*'); 

var client = mqtt.connect("mqtt:admin:[email protected]//localhost:1883"); 

io.sockets.on('connection', function (socket) { 
    socket.on('subscribe', function (data) { 
    console.log('Subscribing to '+data.topic); 
    socket.join(data.topic); 
    client.subscribe(data.topic); 
    }); 
}); 

client.addListener('mqttData', function(topic, payload){ 
    sys.puts(topic+'='+payload); 
    io.sockets.emit('mqtt',{'topic':String(topic), 
    'payload':String(payload)}); 
}); 

的index.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"/> 
<title>IoT Demo</title> 
<script type="text/javascript" src="js/jquery-1.8.3.js"></script> 
<script type="text/javascript" src="js/socket.io.js"></script> 
<script type="text/javascript"> 
    var socket = io.connect('http://localhost:5000'); 
    socket.on('connect', function() { 
     socket.on('mqtt', function (msg) { 
     var elmarr=msg.topic.split("/"); 
     var elm=elmarr[3]; 
     console.log(msg.topic+' '+msg.payload); 
     $('#'.concat(elm)).html(msg.payload); 
    }); 
    socket.emit('subscribe',{topic:'customerenter'}); 
    socket.emit('subscribe',{topic:'customermove'}); 
    socket.emit('subscribe',{topic:'customerexit'}); 
    }); 
</script> 
</head> 
<body> 
<div style="position: absolute; top: 5px; left: 5px;"> 
</div> 
</body> 
</html> 

当我在Chrome调试,

socket.on('mqtt', function (msg) 

从不执行。

有什么想法?

感谢, 特德

回答

0

假设你使用来自NPM(https://www.npmjs.com/package/mqtt)MQTT客户机则MQTT客户应该有一个对“消息”回调设置为处理传入的消息,而不是mqttData听者

client.on('message', function(topic, message){ 
    sys.puts(topic+'='+message); 
    io.sockets.emit('mqtt',{'topic':String(topic), 
    'payload':String(message)}); 
}); 
+0

谢谢hardillb。我在另一篇文章中同时看到了你的答案。这是问题。 :) –

相关问题