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端口的,但是没有测试。(有测试过的同学,麻烦留个言或者私信我一下)
<h3>回答1:</h3><br/>这句话的意思是:WebSocket连接wss://WebSocket是一种基于TCP的网络协议,用于实时双向通信。wss是WebSocket的安全版本,通过SSL加密保证连接安全性。这句话表示正在进行WebSocketwss的连接。 <h3>回答2:</h3><br/>WebSocket 是一种基于 TCP 传输协议和同源策略的全双工通信协议,允许客户端和服务端之间进行实时交互和通信。而 wss:// 是在 WebSocket 基础上增加了 SSL/TLS 安全加密机制,使得通信更加安全可靠。 WebSocket 的通信流程首先需要建立连接,客户端通过浏览器提供的 WebSocket API 和服务端建立连接。在客户端发起连接请求后,服务端将会接收并返回一个包含状态码和握手信息的响应,客户端接收到响应后即可进行数据交换。 对于 wss://,客户端和服务端之间的通信需要通过 SSL/TLS 安全加密机制进行保护。服务端会提供经过证书验证的公钥以供客户端进行加密,客户端接收到公钥后使用 HTTPS 相同的方式进行认证和加密,确保连接过程的安全。 在实际应用中,WebSocketwss:// 主要用于实现实时通信和在线游戏等功能,通过持久化连接实现双方之间快速交互。值得注意的是,由于 wss:// 使用了 SSL/TLS 安全通信协议,所以对服务端的要求会更高,需要进行相应的证书和加密配置等操作。 总而言之,WebSocketwss:// 的出现极大地提升了网络应用的实时性和交互性,可以满足日益增长的实时通信需求。在实际开发中,需要根据实际情况选择使用 WebSocket 或者 wss://,并且注意相应的安全加密和证书配置等问题,确保通信过程的安全可靠。 <h3>回答3:</h3><br/>WebSocket连接wss:// WebSocket是一种通信协议,它允许在Web浏览器和服务器之间进行双向通信。这个协议以TCP作为底层协议,建立一个持久化的连接,使得服务器可以随时向客户端发送数据而不需要等待客户端请求。 WSS是WebSocket的安全版本,使用安全套接字层(SSL)或传输层安全性协议(TLS)提供了加密和认证,确保数据的机密性和完整性。与WS不同的是,WSS连接使用端口号443。 要建立WebSocket连接,客户端和服务器将使用WebSocket API。在客户端上,使用JavaScript API来与服务器通信。在服务器上,必须实现WebSocket协议来接收和处理客户端发送的数据,并向客户端发送数据。 当建立WSS连接时,客户端和服务器之间的通信将通过安全通道进行传输。双方将对彼此进行身份验证,以防止中间人攻击,并使用数据加密和完整性验证来保护传输数据。这样,客户端和服务器之间的通信将更加安全和可信。 总之,WebSocket连接wss://是一种安全、高效的通信方法,它允许双方之间进行双向通信。在建立连接时,客户端和服务器将通过WebSocket API进行通信,并使用安全通道传输数据以保护数据的机密性和完整性。
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值