MQTT 客户端不工作

MQTT client not working

我正在尝试使用按钮单击事件发布消息。客户端应该发送 ONOFF 负载。出于某种原因,我无法理解为什么这不起作用。

server.js

var io = require('socket.io').listen(5000);
var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://localhost:1883')

io.sockets.on('connection', function (socket) {
    socket.on('publish', function (data) {
        client.publish(data.topic, data.payload);
        console.log('Publish to '+ data.payload);
    });
});

client.js

var socket = io.connect('http://localhost:5000');

$('#button').ready(function () {
    socket.on('connect', function () {
        socket.on('mqtt', function (msg) {
            console.log(msg.topic + ' ' + msg.payload);

            $("#on").click('click', function () {
                socket.emit('publish', {topic: 'test/test', payload: 'ON'});
                console.log("on");
            });

            $("#off").click('click', function () {
                socket.emit('publish', {topic: 'test/test', payload: 'OFF'});
                console.log("off");
            })

        });
    })
})

index.HTML

<h1>Test MQTT</h1>
<script src="https://code.jquery.com/jquery-3.1.1.js"></script>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<div id="on" >
    <input type="submit" value="ON" >
    </div>

<div id="off">
    <input type="submit" value="OFF">
</div>
<script src="client.js"></script>

目前,事件侦听器 .clicksocket.on('mqtt' 的回调触发之前不会真正触发。这将响应 'mqtt' 套接字事件。此事件在服务器发布之前不会触发,但服务器仅在客户端发出时发布——这仅在您单击按钮时发生。事件侦听器在它们应该触发的事件发生之前无法添加。

重新整理一下您的逻辑:

$('#button').ready(function () {
    socket.on('connect', function () {
        $("#on").click('click', function () {
            socket.emit('publish', {topic: 'test/test', payload: 'ON'});
            console.log("on");
        });

        $("#off").click('click', function () {
            socket.emit('publish', {topic: 'test/test', payload: 'OFF'});
            console.log("off");
        });

        socket.on('mqtt', function (msg) {
            console.log(msg.topic, msg.payload);
        });
    });
});