mqtt.js 无法连接/错误提示 WebSocket connection to ‘ws://xxxxx‘ failed:

检查点:

  1. 检查自己的页面是http还是https的,然后核对用的是mqtt/mqtts,或者是ws/wss
  2. 检查自己的地址是否对(尤其是BasePath),我一开始地址应该是ws://xxxxx/mqtt(BasePath是mqtt),结果我一直用ws://xxxxx。(有的BasePath是 mqtt/ws,连接地址应该就是 ws://xxxxx/mqtt/ws
  3. 注意端口号,我使用的mqtt服务ws和mqtt端口号不一样

如果以上两点都没问题的话,那么就和我当下的情况一样了
使用 mqtt://xxxxx/mqtt 怎么都连不上,就提示 WebSocket connection to 'ws://xxxxx' failed:

解决方法:
直接使用 ws://xxxxx/mqtt ,记得切换端口号,其他的都不改变,只是改了连接地址

  const connectUrl = `ws://xxxxx/mqtt`;	// 用这个就好了
  //  const connectUrl = `mqtt://xxxxx/mqtt`;	// 用这个报错了,用上面的就好了
  const clientId = `mqtt_${Math.random().toString(16).slice(3)}`;

  var client = mqtt.connect(connectUrl, {
    clientId,
    clean: true,
    connectTimeout: 4000,
    username: 'username',
    password: '123456',
    reconnectPeriod: 1000,
  })
  const topic = '/nodejs/mqtt'
  client.on('connect', () => {
    console.log('Connected')
    client.subscribe([topic], () => {
      console.log(`Subscribe to topic '${topic}'`)
    })
  })

如果不确定自己配置的对不对,可以用下面的地址测试

使用EMQX 提供的 免费公共 MQTT 服务器,该服务基于 EMQX 的 MQTT 物联网云平台 创建。
服务器接入信息如下:

Broker: broker.emqx.io
TCP Port: 1883
Websocket Port: 8083

const connectUrl = `ws://broker.emqx.io:8083/mqtt`;

client = mqtt.connect(connectUrl, {
  clean: true,
  connectTimeout: 4000,
  reconnectPeriod: 1000,
  clientId: 'emqx_test',
  username: 'emqx_test',
  password: 'emqx_test'
})

// 需要订阅的主题
const topic = 'test';

//成功连接后触发的回调
client.on('connect', () => {
  console.log('已经连接成功');
  // 这里可以订阅多个主题
  client.subscribe([topic], () => {
    console.log(`订阅了主题 ${topic}`)
  })
});

// 当客户端收到一个发布过来的消息时触发回调
client.on('message', function (message) {
  // 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
  // let data = JSON.parse(message.toString());
  console.log("返回的数据:", message)
});

// 连接断开后触发的回调
client.on("close", function () {
  console.log("已断开连接")
});

结果
在这里插入图片描述

我个人遇到的一些情况:

  1. mqtt本质上也是用websocketmqtt的,所以使用的端口是ws(8083)或者wss(8084)的端口,并不是mqtt(1883)的端口。
  2. 一般情况下,MQTT的接口是ws://或者mqtt://后面跟/mqtt(只是一般情况下,具体情况需要和后端沟通)例如:ws://broker.emqx.io:8083/mqtt 或者 mqtt://broker.emqx.io:8083/mqtt
  3. 我目前前端使用的话没有通过1883端口链接成功过,无论是 ws://xxxxx 还是 mqtt://xxx。(有成功的同学,麻烦留个言或者私信我一下)
  4. 似乎用node的话,是可以使用1883端口的,但是没有测试。(有测试过的同学,麻烦留个言或者私信我一下)
<think>好的,我需要帮助用户了解如何使用broker.emqx.io提供的CA证书(ca.crt)进行SSL/TLS配置。首先,我得回顾一下用户提供的引用内容,特别是引用[1]、[2]和[3],这些可能包含相关步骤或提示。 根据引用[1],EMQX支持TLS/SSL,包括单/双向认证和X.509证书。用户的问题是关于使用特定的CA证书,所以可能需要配置单向或双向认证。引用[2]的链接可能详细说明了如何启用SSL/TLS,而引用[3]提到了生成证书和加载到EMQX的步骤,可能涉及OpenSSL和证书管理。 用户的需求是使用broker.emqx.io的ca.crt文件。首先,我需要确认通常EMQX的TLS配置需要哪些步骤。通常,配置TLS需要指定CA证书、服务器证书和私钥。如果用户使用的是broker.emqx.io提供的CA证书,可能是用于验证服务器证书的有效性,比如在客户端配置信任该CA,以建立安全连接。 接下来,步骤可能包括:下载ca.crt文件,配置EMQX Broker以使用此CA证书,然后在客户端设置中指定该CA证书以信任服务器。根据引用[3],生成证书可能需要OpenSSL,但这里用户已经有了CA证书,所以可能只需要加载它即可。 需要注意EMQX的配置文件位置,通常是在emqx.conf中设置监听器的SSL选项,指定CA证书路径、服务器证书和私钥。但用户的情况可能只是需要将提供的ca.crt作为受信任的根证书,用于客户端验证服务器。例如,在客户端连接时,指定CA证书路径,确保客户端信任该CA签发的服务器证书。 此外,可能需要检查EMQX的文档,确认如何正确配置监听器使用TLS,并引用正确的证书路径。如果用户是作为客户端连接,比如使用MQTTX工具,那么配置客户端时需选择CA证书文件,确保启用SSL/TLS并选择正确的协议版本(如TLS 1.2)。 可能出现的问题包括证书路径错误、权限问题,或者证书链不完整。需要提醒用户确保ca.crt文件正确放置,并且EMQX配置中路径正确。同时,检查端口是否正确(如8883用于MQTT over TLS),以及防火墙设置是否允许该端口通信。 总结步骤大致如下: 1. 下载ca.crt文件。 2. 配置EMQX的监听器,指定CA证书和相关SSL选项。 3. 客户端连接时使用ca.crt进行服务器验证。 4. 测试连接,处理可能出现的错误。 需要验证这些步骤是否符合引用中的指南,特别是引用[2]和[3]提到的配置方法。例如,引用[3]提到了生成证书的步骤,但用户已经有CA证书,可能不需要生成,只需加载。同时,引用[2]的链接可能有具体的配置示例,需要参考。 最后,生成相关问题时要围绕TLS配置、证书管理、连接测试和常见问题处理等方面。</think>### 如何使用 EMQX MQTT Broker 的 CA 证书进行 SSL/TLS 配置 以下是基于 `broker.emqx.io` 提供的 `ca.crt` 文件配置 SSL/TLS 的步骤: #### 1. **下载并保存 CA 证书** - 从 `broker.emqx.io` 获取 `ca.crt` 文件,保存到服务器的安全目录(如 `/etc/emqx/certs/`)[^2]。 #### 2. **配置 EMQX Broker 的 SSL/TLS 监听器** 编辑 EMQX 的配置文件 `emqx.conf`,启用 TLS 并指定证书路径: ```bash # 启用 8883 端口(MQTT over TLS) listener.ssl.external = 8883
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值