我无法通过 Websocket 从 JavaScript 客户端连接到本地 Mosquitto 1.4.10 代理。
同一个 JavaScript 客户端通过 Websocket 成功连接到端口 8080 上 test.mosquitto.org 上的公共代理。
端口 1883 上的 MQTT 协议连接工作正常,我使用 mosquitto_pub 和 mosquitto_sub 进行了测试。
我的代理设置在运行 Ubuntu 14.04 的 VirtualBox 中。
我在同一台虚拟机上安装了 libwebsockets。
我的本地代理是在config.mk文件中使用WITH_WEBSOCKETS:=yes编译的
我正在从 Firefox 浏览器的同一虚拟机加载 JavaScript 客户端网页,并在浏览器控制台中看到以下错误消息:
Firefox 无法在 ws://localhost:8080/mqtt 建立与服务器的连接
您对解决此问题的建议将不胜感激。
谢谢。
这是我的 Mosquitto .conf 文件:
port 1883
listener 8080
protocol websockets
log_type all
websockets_log_level 1023
connection_messages true
这是 Mosquitto 服务器的日志(websockets 日志记录级别设置为 1023,并且详细日志记录已打开 - 当我加载 JavaScript 网页时没有出现任何消息):
1481381105:从 1481381105 开始的 mosquitto 版本 1.4.10(构建日期 2016-12-10 18:47:37+0530)
:从 /etc/mosquitto/mosquitto.conf 加载配置。
1481381105:在端口 8080 上打开 websockets 侦听套接字。
1481381105:初始日志记录级别 10231481381105:Libwebsockets 版本:2.1.0 manavkumarm@manav-alljoyn
1481381105:IPV6 未在
1481381105 中编译:libev 支持未在
1481381105 中编译:libuv 支持未在
1481381105 中编译:线程:1 每个 1024 fds
1481381105:mem:平台 fd 映射:4096 字节
1481381105:使用 OpenSSL 编译
的默认值 1105:创建 Vhost 4818 18支持' 端口 8080,3 个协议,IPv6 关闭
1481381105:使用非 SSL 模式
1481381105:在端口 8080 上
侦听 1481381105:mem:per-conn:376 字节 + 协议 rx buf
1481381105:canonical_hostname = mqtt
1481381105:在端口 18 上打开 ipv4 侦听套接字 3 .
1481381105:在端口 1883 上打开 ipv6 侦听套接字。
以下是 JavaScript 源代码:
<html>
<body>
<script src="mqttws31.js"></script>
<script>
try
{
// Create a client instance
console.log("Creating client object...");
client = new Paho.MQTT.Client("localhost", Number(8080), "manav");
//client = new Paho.MQTT.Client("test.mosquitto.org", Number(8080), "manav");
// set callback handlers
console.log("Setting handlers...");
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
// connect the client
console.log("Connecting...");
client.connect( {
onSuccess: onConnect,
mqttVersion: 4
});
}
catch (e)
{
console.log("Error: " + e.description);
}
// called when the client connects
function onConnect()
{
// Once a connection has been made, make a subscription and send a message.
console.log("Connected");
setTimeout( function() {
client.subscribe("world");
message = new Paho.MQTT.Message("Hello");
message.destinationName = "world";
client.send(message);
//client.disconnect();
}, 5000);
}
// called when the client loses its connection
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("Connection lost: " + responseObject.errorMessage);
}
}
// called when a message arrives
function onMessageArrived(message) {
console.log("Received Message: " + message.payloadString);
client.disconnect();
}
</script>
<h1>My MQTT Websockets Example</h1>
</body>
</html>