代码之家  ›  专栏  ›  技术社区  ›  gil

MQTT协议在React中的使用

  •  4
  • gil  · 技术社区  · 7 年前

    我是一个新的反应者,我试图理解如何让MQTT与它一起工作。

    我试图遵循此处发布的代码示例: https://www.npmjs.com/package/mqtt-react

    但没有成功。 出于某种原因,这就是什么都不要做。

    这是我的代码:

    应用程序。js等级:

    import React, { Component } from 'react';
    import './App.css';
    import PostMqtt from './PostMessage.js';
    import {Connector} from "mqtt-react";
    
    class App extends Component {
        render() {
            return (
                <div className="App">
                    <PostMqtt/>
                </div>
            );
        }
    }
    
    export default () => (
        <Connector mqttProps="ws://test.mosquitto.org/">
            <App />
        </Connector>
    );
    

    后消息。js等级:

    import React from 'react';
    import { subscribe } from 'mqtt-react';
    
    export class PostMessage extends React.Component {
    
        sendMessage(e) {
            e.preventDefault();
            //MQTT client is passed on
            const { mqtt } = this.props;
            mqtt.publish('sensor', 'My Message');
        }
    
        render() {
            return (
                <button onClick={this.sendMessage.bind(this)}>
                    Send Message
                </button>
            );
        }
    }
    
    export default subscribe({
        topic: 'sensor'
    })(PostMessage)
    

    你知道哪里出了问题吗? 谢谢

    2 回复  |  直到 7 年前
        1
  •  5
  •   gil    7 年前

    经过长时间的研究,我找到了解决办法。

    上面的连接器支持MQTT over web套接字。 默认的mosquitto MQTT端口是1883,它直接连接到MQTT代理,而不是通过websockets,这就是它没有连接的原因。

    解决方案是使用端口8080,它是“WebSockets上的MQTT,未加密”(根据mosquitto文档)。

    所以我所要做的就是将下面的行从 到 它成功了。

    希望对别人有帮助。

        2
  •  2
  •   nlorch    6 年前

    我还遇到了websocket/mqtt协议问题。我使用 this tutorial . 为了让消息代理使用react,我找到了一篇文章,描述了如何将mosca绑定到http服务器。我丢失了链接,但下面是我用来将两者结合起来的片段:

    websocket代理。js公司

    var http     = require('http')
      , httpServ = http.createServer()
      , mosca    = require('mosca')
      , mqttServ = new mosca.Server({});
    
    mqttServ.attachHttpServer(httpServ);
    
    httpServ.listen(80);
    

    然后开始我的经纪人,我只做了一个简单的:

    node websocket-broker.js
    

    我希望这能在将来帮助任何人解决这个问题!