Node.js - Mosca 和 Heroku
Node.js - Mosca & Heroku
我在 node.js 上构建了一个使用 Mosca 和 MQTT 的服务器。
在我的本地主机上,一切正常,包括通过 mosquitto (_sub/_pub) 发送的 get/send 消息。
当我将代码上传到 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://<app>.herokuapp.com
) 的 http url。
我试图像这样通过 mosquitto_sub 获得 testMsg
:
> mosquitto_sub -h <app>.herokuapp.com -t testTopic
运气不好。
如果我使用本地主机版本并输入 mosquitto_sub -t testTopic
就可以了。
为什么不在 Heroku 中?
(顺便提一下,我用的是打字稿。)
Heroku 只会通过 HTTP(在 HTTPS 的端口 80 或 443 上)公开 Web 应用程序。它不会将端口 1883 上的传入数据转发到应用程序实例。
如果您离开 mosquitto_sub 足够长的时间,我预计它会打印有关连接失败的错误消息。
如果您想在 Heroku 上托管 MQTT 代理,您将需要通过 Websockets 使用 MQTT,最有可能在端口 443 上使用 HTTPS
我在 node.js 上构建了一个使用 Mosca 和 MQTT 的服务器。
在我的本地主机上,一切正常,包括通过 mosquitto (_sub/_pub) 发送的 get/send 消息。
当我将代码上传到 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://<app>.herokuapp.com
) 的 http url。
我试图像这样通过 mosquitto_sub 获得 testMsg
:
> mosquitto_sub -h <app>.herokuapp.com -t testTopic
运气不好。
如果我使用本地主机版本并输入 mosquitto_sub -t testTopic
就可以了。
为什么不在 Heroku 中?
(顺便提一下,我用的是打字稿。)
Heroku 只会通过 HTTP(在 HTTPS 的端口 80 或 443 上)公开 Web 应用程序。它不会将端口 1883 上的传入数据转发到应用程序实例。
如果您离开 mosquitto_sub 足够长的时间,我预计它会打印有关连接失败的错误消息。
如果您想在 Heroku 上托管 MQTT 代理,您将需要通过 Websockets 使用 MQTT,最有可能在端口 443 上使用 HTTPS