前回、Deno でMQTT(MQTTS) を試していたら Ruby はどうなのかということが気になった。
なので、確認しておく。
参考
実装
とりあえず導入
1 | $ gem install mqtt |
実装は次の通り。
1 | require 'mqtt' |
とここで問題なのが、client.get
が後続の処理をブロックしてしまうために、一向に publish が呼ばれない。
ブロックではない client.get
も受信を待ってしまう。
JSのような、1プロセスで送受信を非同期に行うのは少々苦しいものでした。
この辺りは、言語の特性めいたものを感じます。
Thread で、送信/受信を並列化
Thread を使って、受信側を別スレッドで操作させると次のようになる。
1 | require 'mqtt' |
本来欲しかった動作をするようになりました。
Ractor でもできないものかとトライしてみましたが、用途違いの感じ。
MQTTS を Ruby 使ってみた。
送受信を両方できるようにするところで、スレッドを使うであるとかの手段を取る必要があるのはポイント。
PahoMqtt は MQTT.js ライクに記述ができそう。
しかし5年メンテもされていないようなので、積極的に使う必要は無さそうです。
では。