为什么Reactjs mqtt客户端url返回wss?

时间:2017-08-20 08:26:17

标签: node.js reactjs mqtt

使用node client_test.js时,以下代码效果很好。但当我把它放到reactjs时,我得到了这个错误:

  

(未知)WebSocket与' wss://dev.xxx.com:8083 /'的连接失败:连接建立错误:net :: ERR_INSECURE_RESPONSE

此网址始终转换为wss协议。我不知道为什么会这样。

var mqtt = require('mqtt')

var options = {
  //port: 8083,
  //host: 'dev.xxx.com',
  clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
  username: 'xxx',
  password: new Buffer('xxx'),
  keepalive: 10,
  reconnectPeriod: 1000,
  protocolId: 'MQIsdp',
  protocolVersion: 3,
  clean: true,
  encoding: 'utf8',
  //protocol: 'mqtts',
  rejectUnauthorized : false,    
  will: {
    topic: 'node/status',
    payload: new Buffer('offline')
  }
};

var client  = mqtt.connect('mqtts://dev.xxx.com:8083', options)

client.on('connect', function () {
  client.subscribe('presence')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
})

1 个答案:

答案 0 :(得分:0)

由于ReactJS在浏览器中运行,浏览器沙箱只允许它生成ws(s)连接而不是本机MQTT所需的原始套接字连接。

mqtt库自动将URL转换为可在浏览器中尝试使用的URL(即安全的websocket连接)

如果要将其与ReactJS一起使用,您需要确保您的代理支持Secure Websockets连接