Paho Rabitmqq 连接失败
Paho Rabitmqq connection getting failed
这是我的paho
客户端代码
// Create a client instance
client = new Paho.MQTT.Client('127.0.0.1', 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("/World");
message = new Paho.MQTT.Message("Hello");
message.destinationName = "/World";
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);
}
在 Rabbitmq
服务器上,一切都是默认设置。当我 运行 这个代码时,我得到 WebSocket connection to 'ws://127.0.0.1:1883/mqtt' failed: Connection closed before receiving a handshake response
我错过了什么?
问题中不清楚,但我假设你是 运行 网络浏览器中的上述代码。
这将通过 Websockets 建立 MQTT 连接(如错误中所示)。这不同于基于 TCP 连接的本机 MQTT。
如果默认纯 MQTT 端口为 1883,则 Websocket 支持可能在不同的端口上。
您将需要配置 RabbitMQ 以接受基于 Websocket 的 MQTT 以及纯 MQTT,此 pull 请求 RabbitMQ seams 讨论添加此功能。它提到此功能仅在版本 3 中添加。6.x 并且文档仍然未完成(截至 2016 年 2 月 9 日)
根据我在 windows 上使用 Paho MQTT JavaScript 库和 RabbitMQ 代理的个人经验,这里列出了您需要做的事情才能从 JS 中使用 MQTT浏览器:
- 安装 rabbitmq_web_mqtt 插件(您可以找到最新的二进制文件 here,将其复制到 "c:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.2\plugins\",然后使用 "rabbitmq-plugins enable rabbitmq_web_mqtt" 从命令行启用。
- 当然,broker也需要开启MQTT插件
- 对我来说,客户端无法使用 RabbitMQ 的 3.6.1 版,但它可以与 3.6.2 版一起使用 (Windows)
- 用于连接的端口是 15675,而不是 1883!
- 确保在创建 Paho.MQTT.Client 实例时指定所有 4 个参数。万一你省略了一个,你会得到 websocket 连接错误,这可能会产生误导。
最后,这是我测试过的完美运行的代码片段(只是建立连接):
client = new Paho.MQTT.Client("localhost", 15675, "/ws", "client-1");
//set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
//connect the client
client.connect({
onSuccess : onConnect
});
//called when the client connects
function onConnect() {
console.log("Connected");
}
//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);
}
这是我的paho
客户端代码
// Create a client instance
client = new Paho.MQTT.Client('127.0.0.1', 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("/World");
message = new Paho.MQTT.Message("Hello");
message.destinationName = "/World";
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);
}
在 Rabbitmq
服务器上,一切都是默认设置。当我 运行 这个代码时,我得到 WebSocket connection to 'ws://127.0.0.1:1883/mqtt' failed: Connection closed before receiving a handshake response
我错过了什么?
问题中不清楚,但我假设你是 运行 网络浏览器中的上述代码。
这将通过 Websockets 建立 MQTT 连接(如错误中所示)。这不同于基于 TCP 连接的本机 MQTT。
如果默认纯 MQTT 端口为 1883,则 Websocket 支持可能在不同的端口上。
您将需要配置 RabbitMQ 以接受基于 Websocket 的 MQTT 以及纯 MQTT,此 pull 请求 RabbitMQ seams 讨论添加此功能。它提到此功能仅在版本 3 中添加。6.x 并且文档仍然未完成(截至 2016 年 2 月 9 日)
根据我在 windows 上使用 Paho MQTT JavaScript 库和 RabbitMQ 代理的个人经验,这里列出了您需要做的事情才能从 JS 中使用 MQTT浏览器:
- 安装 rabbitmq_web_mqtt 插件(您可以找到最新的二进制文件 here,将其复制到 "c:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.2\plugins\",然后使用 "rabbitmq-plugins enable rabbitmq_web_mqtt" 从命令行启用。
- 当然,broker也需要开启MQTT插件
- 对我来说,客户端无法使用 RabbitMQ 的 3.6.1 版,但它可以与 3.6.2 版一起使用 (Windows)
- 用于连接的端口是 15675,而不是 1883!
- 确保在创建 Paho.MQTT.Client 实例时指定所有 4 个参数。万一你省略了一个,你会得到 websocket 连接错误,这可能会产生误导。 最后,这是我测试过的完美运行的代码片段(只是建立连接):
client = new Paho.MQTT.Client("localhost", 15675, "/ws", "client-1");
//set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
//connect the client
client.connect({
onSuccess : onConnect
});
//called when the client connects
function onConnect() {
console.log("Connected");
}
//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);
}