我一直在尝试使用端口 1883 在我的 AWS EC2 服务器上设置 MQTT 代理。到目前为止,它可以与ruby-mqtt gem一起使用,但我无法使用 Paho Javascript Client 为网站设置它。
到目前为止我做了什么:
蚊子
在我的 AWS EC2 实例上安装了 mosquitto,它正在运行并在端口 1883 上侦听。我使用命令在本地订阅了一个主题
mosquitto_sub -h localhost -p 1883 -v -t 'topic1'
AWS EC2 安全组
允许通过端口 1883 的流量(在 tcp 协议下)
Ruby on Rails
安装了 ruby-mqtt gem,并通过在 rails 控制台(开发环境)中运行以下代码来测试 mqtt 是否正常工作
MQTT::Client.connect(ip_address_or_domain_name) do |c|
c.publish('topic1', 'message to topic 1')
end
该消息出现在mosquitto_sub
正在运行的终端中。
Nginx
所有这一切都是在没有对 Nginx 配置文件进行任何配置的情况下完成的。
帕霍客户
因此,我在本地计算机上启动了本地 Rails 服务器,并在我的一个 html 视图上运行示例 javascript 片段。
// Create a client instance
client = new Paho.MQTT.Client("mqtt.hostname.com", Number(1883), "", "clientId")
// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
// connect the client
client.connect({onSuccess:onConnect});
// called when the client connects
function onConnect() {
// Once a connection has been made, make a subscription and send a message.
console.log("onConnect");
client.subscribe("topic1");
message = new Paho.MQTT.Message("Hello");
message.destinationName = "topic1";
client.send(message);
}
// called when the client loses its connection
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
// called when a message arrives
function onMessageArrived(message) {
console.log("onMessageArrived:"+message.payloadString);
}
但我无法连接。我在 chrome 开发者控制台中遇到的错误是:
WebSocket connection to 'ws://mqtt.example.com:1883/' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET
我不确定这里有什么问题。非常感谢任何帮助!提前致谢!