【问题标题】:Node.js - Mosca & HerokuNode.js - Mosca 和 Heroku
【发布时间】:2020-09-21 07:55:31
【问题描述】:

我在 node.js 上构建了一个使用 Mosca 和 MQTT 的服务器。

在我的本地主机上,一切正常,包括通过 mosquitto (_sub/_pub) 获取/发送消息。

当我将代码上传到 Heroku 时,mqtt 请求在服务器内部工作,但我在 mosquitto 上什么也没看到。

这是我运行 MQTT 代理的代码。

import { ServerOptions, Server, Client } from "mosca";
const settings: ServerOptions = {
    port: 1883,
};
const ms = new Server(settings);

为了通过 node.js 发布消息,我使用了这些代码行:

import * as mqtt from "mqtt";
const mqttServer = mqtt.connect("mqtt://localhost:1883");
mqttServer.publish(`testTopic`, `testMsg`);

我使用了 heroku 的 http url (http://<app>.herokuapp.com)。
我试图像这样通过 mosquitto_sub 获取testMsg

> mosquitto_sub -h <app>.herokuapp.com -t testTopic

没有运气。

如果我使用 localhost 版本并输入 mosquitto_sub -t testTopic 就可以了。

为什么不在 Heroku 中?

(顺便提一下,我用的是打字稿。)

【问题讨论】:

    标签: node.js heroku mqtt mosca


    【解决方案1】:

    Heroku 只会通过 HTTP 公开 Web 应用程序(在端口 80 或 443 上用于 HTTPS)。它不会将端口 1883 上的传入数据转发到应用程序实例。

    如果你离开 mosquitto_sub 的时间足够长,我希望它会打印一个关于连接失败的错误。

    如果您想在 Heroku 上托管 MQTT 代理,您需要在 Websockets 上使用 MQTT,最有可能在端口 443 上使用 HTTPS

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多