You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下无法连接Aedes MQTT Broker的问题排查与解决

MQTT服务器(Aedes + Node.js)无法被MQTT X客户端连接的问题

问题描述

我正在使用Aedes和Node.js编写一个简单的MQTT服务器,以下是Broker代码:

import aedes from "aedes";
import net from "net";

const port = 1883; // MQTT Port
const broker = net.createServer(aedes.handle);

broker.listen(port, () => {
  console.log(`Find the server at: mqtt://localhost:${port}/`); 
});

我在MacOS Ventura 13.2系统上使用MQTT X作为客户端,尝试连接服务器时出现超时,无法成功连接。已尝试将localhost改为127.0.0.1,但依然无效。

通过telnet测试可以看到端口处于开放状态:

$ telnet localhost 1883
Trying ::1...
Connected to localhost.
Escape character is '^]'.
sdfsdf
^C

请问是什么原因导致客户端无法连接Broker?该如何解决?

原因分析与解决方法

问题原因

你没有创建Aedes的实例,直接将模块的aedes.handle传给了net.createServer。Aedes的handle方法需要绑定到具体的Aedes实例上才能正确处理MQTT协议的连接请求,当前写法会导致服务器无法解析MQTT客户端的连接报文,最终引发客户端连接超时。

解决步骤

修改代码,先创建Aedes实例,再将实例的handle方法传入net.createServer:

import aedes from "aedes";
import net from "net";

const port = 1883; // MQTT Port
// 创建Aedes实例
const aedesInstance = aedes();
const broker = net.createServer(aedesInstance.handle);

broker.listen(port, () => {
  console.log(`Find the server at: mqtt://localhost:${port}/`); 
});

验证方式

可以给Aedes实例添加连接监听事件,确认客户端是否成功连接:

aedesInstance.on('client', (client) => {
  console.log(`客户端已连接: ${client.id}`);
});

修改完成后,重新启动服务器,再用MQTT X客户端连接mqtt://localhost:1883或mqtt://127.0.0.1:1883即可正常连接。

内容的提问来源于stack exchange,提问作者Mendes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:25:40