Open8

RustでMQTTブローカーを作る

ピン留めされたアイテム
しゅれねこしゅれねこ

MQTTを作ろうと思って作ったときに参考にした先人達の情報へのポインタです。

なぜやろうとおもったか

  • Rustを書いてみたかった
  • 普段MQTTを使っているので理解を深めたかった

使うだけなら巷のやつを使った方が良いです。

しゅれねこしゅれねこ

やること

受信処理

  1. MQTTヘッダーを処理し⇒パケットの種類判別 / パケットの残りサイズを把握する
  2. パケットの種類に応じて内部の状態を変更する

送信処理

  1. つながっているソケットにデータを送りつける

状態

複数のスレッドで状態(Connection Info /Subscribe topic filter)を共有する必要がある。スレッド間はArc/Mutexを使うと思うので、the book「16. 恐れるな!並行性」を参考

しゅれねこしゅれねこ

MQTT Topic

Subscribeで受診するトピックフィルターを指定できるが、httpのURLとは異なり、ワイルドカード的なものを指定できる。 例:a/+/c だと a/b/cやa/d/cなどのトピックを受信できる。
DBのインデックスで実装されるのと同様にTree構造を形成すれば正規表現を回すよりも良さげ(未実装)

ただし、他のブローカーの実装を(あえて)見ていないのでよくわからない。
完成したあとに調査しようと思ってる。

他やることいっぱい

  • QoS
  • Will/Retain

逆に👆の実装が面倒なのでちゃんとした(プロプラの/OSSの)MQTTブローカーを使っとけという話だと思います。