ネットワーク

82. MQTTプロトコルとは

IoT(=Internet of Things)の時代においてMQTT(=Message Queue Telementary Transport)という
プロトコルが重要視されている。
MQTTとはIBM iにハードウェア機器を直接接続する通信手段と考えることができる。
MQTTとはIBMが1999年に開発したIoTのための通信プロトコルであり
2019年にIBMはこれを公開した。
まだわずか3年前に初めて公開されたばかりの最新技術である。
 
MQTTを使うと工作機械とIBM iとの接続が可能になる。
つまり工作機械とIBM iとの双方向通信が可能になる。
今までプリンタをIBM iに接続するということを紹介していたが
MQTTを使うと工作機械とIBM iの直接接続が可能になるのである。

社内のハードウェアとIBM iが直接接続することができれば
作業指示を直接機械に送ることができるし
工程の進捗も伝票に転記してから入力するのではなく
機械から直接IBM iへ情報収集することができる。
 
森精機を初めとする工作機械メーカーではIoTコネクターがもはや標準装備されており
既存の工作機械に対してもわずか2万円で装着できるIoTコネクターを販売している
会社も出てきている。

MQTTとはIoTの実現で使われる通信プロトコルでHTTPと比較して
軽量でパフォーマンスに優れていると言われている。
それもそのはずでHTTP/1.1とはプロトコルの内容がすべて
テキスト・ベースである。
つまり GET /… のようにテキスト・ベースでの会話であり
これはだけが見てもわかりやすくやさしい。
しかし一方でHTTPには次のような問題があった。

・HTTPはパフォーマンスが悪い

テキスト・ベースであるためプロトコルは冗長となって
そのため全体のスルー・プットが低下する。

・HTTPはセッション継続ができない。

HTTP/1.1は要求に対して結果のHTMLを送信すればそれだ
終わりで通信は直ちに切断される。
これが基本である。
このため5250エミュレータのような通信を持続させたい業務には
向かない。


これに対してMQTTプロトコルは情報はバイナリでありビット単位で
設定されている。解析やMQTTプロトコルの開発は大変であるが
次のようなメリットがある。

・MQTTはパフォーマンスに優れている。

MQTTはバイナリ・ベースであり双方向通信が基本なので
通信はセッションのあいだ゛津弾されることはなく
会話も短いのでパフォーマンスが優れている。

・MQTTはセッション継続が可能である。

MQTTはIoかを目的に開発されたプロトコルとして
通信は意図的に切断されるまでは継続される。
従ってセッション管理が可能である。

MQTTはIoTやM2M(=Machine to Machine)を目的に開発されているので
確かに高速での通信が実現できるのだがわずか15種類しかない
コマンドに対してそれらを使用するにしてもMQTTプロトコルの仕様を
理解するのは容易ではない。

MQTTコマンドの一覧

コマンド 説明
CONNECT クライアントがサーバーへの接続を要求
CONNACK 接続確認応答
PUBLISH メッセージのパブリッシュ
PUBACK パブリッシュの受信(送達保証 パート 1)
PUBREC パブリッシュ のリリース(送達保証 パート 2)
PUBREL パブリッシュ のリリース(送達保証 パート 2)
PUBCOMP パブリッシュの完了(送達保証パート 3)
SUBSCRIBE クライアント・サブスクライブ要求
SUBACK サブスクライブ確認応答
UNSUBSCRIBE クライアント・アンサブスクライブ要求
UNSUBACK アンサブスクライブ確認応答
PINGREQ PING 要求
PINGRESP PING 応答
DISCONNECT クライアント切断中

MQTTのサーバーとしてのMQTTプローカーを作成しようとすると
単にMQTTプロトコルを理解するだけでなく次のような高いハードルが
待ち受けている。

・MQTTをJavaScrpt対応にするにはWebSocketが必要である。

 JavaScrptでもMQTTのライブラリーが用意されているので
JavaScriptでMQTTプロトコルを実装することができる。
ただしサーバー側ではWebSocketの対応が必要である。

WebSocketとはクライアントから送られてくるWebSocket記号に対して
これにコードを付加してBase64で暗号化してクライアントに
戻すというハンドシェイクというBASIC認証のような認証作業が
必要となる。
ハッシュ作業というのもここで必要となる。
これらの複雑な処理のAPIは一応IBM iのAPIとして
提供されているがそれらを駆使するのは並大抵のことではない。
相当ハードルが高いと思って間違いない。

 ということでMQTTプロトコルは実用的なものを実現すると
なると難易度が超がつく難しい開発となるので
IBM iの世界ではMQTTプロトコルを実装したソリューションが
世界中でどこにも出回っていないのも無理はない。

㈱オフィスクアトロではTCP/IPベースのMQTTブローカーの開発に
成功して現在WebSocketへの対応も追加している。