2017-03-24 13 views
1

MQTT.jsのwebsocketクライアントに接続しようとしていますが、サーバーとのハンドシェイクを取得できません。MQTT.jsがWebソケットから接続していません

マイコード:

<html> 
<head> 
    <title>test Ws mqtt.js</title> 
</head> 
<body> 
    <script src="//unpkg.com/[email protected]/dist/mqtt.min.js"></script> 
    <script> 
     var options = { 
      clientId: 'service-3Kx03pKnM2', 
      connectTimeout: 5000, 
      hostname: 'xxx.xxx.xxx', 
      port: 8000 
     }; 

     var client = mqtt.connect(options); 

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

     client.on('message', function (topic, message) { 
      console.log(message.toString()); 
      client.end(); 
     }); 
    </script>  
</body> 
</html> 

私はこのエラーを取得してい:WebSocket connection to 'ws://broker.hivemq.com:8000/' failed: Connection closed before receiving a handshake response

私が間違いをしている場合はお知らせください。

私はあなたがあなたの接続オプションでpathが欠落しているunpkg.com/[email protected]/dist/mqtt.min.js

+0

私の投票は、ピアのWebSocketバージョンの不一致です。ブラウザの情報を示してください。 – cagdas

+0

@cagdas:要約できますか?私はあなたを得ることができませんでした – RealSteel

+0

クライアントとサーバーの間のプロトコルバージョンの不一致のために、websocketで起こりうるハンドシェイクの問題が発生しています。だから、どのバージョンのwebsocketプロトコルが8または13などのブローカーとクライアントで使用されているかを調べる必要があります。ハンドシェイクを交換するには古すぎるかもしれません。 – cagdas

答えて

2

以外の任意の他のスクリプトを使用していませんよ。 HiveMQ公共ブローカーは「MQTT」インスタンスWSについて なければならないEclipse Wiki

接続MQTTで指定されたURLのパス部分に応じたのWebSocket接続用/ MQTTをリッスン:// M2M .eclipse.org:800/mqtt。 mqttをデフォルトの設定にして、代替設定オプションを指定する必要があります。

オプションでpath: '/mqtt'を追加する必要があります。

var options = { 
     clientId: 'service-3Kx03pKnM2', 
     connectTimeout: 5000, 
     hostname: 'xxx.xxx.xxx', 
     port: 8000, 
     path: '/mqtt' 
    }; 
関連する問題