【问题标题】:Messages not received using node.js MQTT client with socket.io使用带有 socket.io 的 node.js MQTT 客户端未收到消息
【发布时间】:2015-10-19 16:28:17
【问题描述】:

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

这是我的代码:

订阅.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:admin@//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)

永远不会被执行。

有什么想法吗?

谢谢, 泰德

【问题讨论】:

    标签: node.js socket.io messages mqtt


    【解决方案1】:

    假设您使用来自 npm (https://www.npmjs.com/package/mqtt) 的 Mqtt 客户端,那么 mqtt 客户端应该设置一个 on 'message' 回调来处理传入消息,而不是 mqttData 侦听器

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

    【讨论】:

    • 感谢 hardillb。当我阅读您的答案时,我同时在另一篇文章中看到了这一点。这就是问题所在。 :)
    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2021-05-23
    • 2014-08-02
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多