MQTTに接続するときに私が経験するこの奇妙な振る舞いの説明については、webとstockexchangeの両方を検索しました。しかし、私は同様の事例を見つけることができず、問題がどこから来るのか理解したいと思います。MQTTブローカー・アドレスにtcp://が必要ですか?
私はラスベリPiでポート1883を聞くためにMosquitto MQTTブローカーを設定しました。私はルータにポートフォワーディングを設定していますので、私のホームネットワークの外からPiにアクセスできます下記のような公共のサーバで行動を再現する:broker.hivemq.com
)私は、次ののNode.jsスクリプトを実行すると、私はブローカーに接続して、サブスクライブしてメッセージを公開し、それが完璧に動作することができます:
const mqtt = require('mqtt')
const client = mqtt.connect('tcp://my.address.net:1883')
client.on('connect',() => {
console.log('Connected!')
client.subscribe("chat")
})
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(line){
client.publish('chat',line)
})
client.on('message', (topic, message) => {
console.log('>> '+message)
})
しかし、私はtcp://
プロトコルを除外し、
const client = mqtt.connect('my.address.net:1883')
を持っている場合
私は接続を取得しませんが、エラーメッセージも表示されません。私はそれを終了するまで、プログラムはちょうどハングアップします。私はそれを理解していない。 MQTTはデフォルトでTCPを使用していませんか?
これはクライアントまたはブローカーと関係がありますか?私のシステム(OSX)と何か関係がありますか?
多分これはそれとは何の関係もありませんが、私が手に類似した挙動が、私は、PythonにPAHO MQTTパッケージを使用する場合、私がいないここにいるので、これは、実際に私のために、より重要なケースでありますそれをまったく動かす。これは私のコードです:
import paho.mqtt.client as paho
def on_connect(client, userdata, flags, rc):
print("connected")
client.disconnect()
def on_disconnect(client, userdata, rc):
print("disconnected")
client = paho.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("my.address.net", 1883)
このバージョンをプロトコルなしで使用すると、私は何の反応も出ません。プログラムは1秒間実行され、終了します。私は、プロトコル
client.connect("tcp://my.address.net", 1883)
を使用している場合、私はエラー
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
を取得し、私は私が行方不明ですか分かりません。
誰かがアドレスの中でtcp://
プロトコルを述べている点の違いを説明することはできますか?
URIの説明ありがとうございます。あなたが言ったように、実際にはPythonコードが働いた! loop_forever()を追加すると、接続されたメッセージと接続されていないメッセージも表示されました。これが私を最初から混乱させました。 – Nejesis