【ラズパイ x IoTネットワーク】MQTTをローカルネットワーク間で通信してみる・その3 〜 Aedesブローカーを動かそう
※ 当ページには【広告/PR】を含む場合があります。
2020/09/13
ブローカーの実装
Moscaの時と少し用法が変わっていますので、
// 👇aedesインスタンスの取得
const aedes = require('aedes')();
aedes.on('clientError', function (client, err) {
console.log('client error', client.id, err.message, err.stack)
});
aedes.on('connectionError', function (client, err) {
console.log('client error', client, err.message, err.stack)
});
aedes.on('publish', function (packet, client) {
if (client) {
console.log('message from client', client.id)
}
});
aedes.on('subscribe', function (subscriptions, client) {
if (client) {
console.log('subscribe from client', subscriptions, client.id)
}
});
aedes.on('unsubscribe', function (subscriptions, client) {
if (client) {
console.log('unsubscribe from client', subscriptions, client.id)
}
});
aedes.on('client', function (client) {
console.log('new client', client.id)
});
aedes.on('clientReady', function (client) {
console.log('client is ready', client.id)
});
aedes.on('clientDisconnect', function (client) {
console.log('client disconnected', client.id)
});
const server = require('net').createServer(aedes.handle);
const port = 1883;
server.listen(port, function () {
console.log(`Server running at mqtt://localhost:${port}/`);
});
Mosca時代の実装と比べてもどことなく用法が似ていますが、イベントハンドラ
aedes.on
client:
新規クライアントが登録されたときに処理
clientReady:
クライアントの初期化完了し、通信待機状態になったときの処理
clientDisconnect:
クライアントの通信が正常に切断されたときに処理
clientError:
通信中のクライアントに異常が発生した際に処理
connectionError:
クライアントの初期化に失敗した場合に処理
publish:
パブリッシャーがメッセージをブローカーに送信した時の処理
第一引数にメッセージパケットを含める
この場合トピックはpacket.topicから取り出し
subscribe:
サブスクライバーが購読をリクエストした時の処理
第一引数にトピックを含むオブジェクトを指定
unsubscribe:
サブスクライバーが購読を取り止める時に処理
第一引数にトピックを含むオブジェクトを指定
closed:
サーバーが終了した際に処理
サーバーの起動とクライアントの接続
サーバーの起動自体はMoscaと同じ要領で、ブローカーの起動を行います。 サーバー機のコンソールから以下を実行します。 (途中、別のサブスクライバーから接続を試みています。)
$ node broker.js
Server running at mqtt://localhost:1883/
#👇サブスクライバーの接続
new client mqttjs_149bec5b
client is ready mqttjs_149bec5b
subscribe from client [ { topic: 'hoge/piyo/fuga', qos: 0 }, qos: 0 ] mqttjs_149bec5b
#...
#👇サブスクライバーの切断
client disconnected mqttjs_149bec5b
unsubscribe from client [ 'hoge/piyo/fuga' ] mqttjs_149bec5b
ちゃんとAedesでもブローカーが起動していることを確認できたらOKです。
ちなみにMQTTクライアント側は前回と同様
mqtt.js
まとめ
今回の記事の内容では、MoscaからAedesへのブローカーの移行する簡単な検証を行いました。
今後はもう少しmqttらしい応用を特集していこうかと思いますので、その時は是非また当ブログを覗いてみてください。