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への対応も追加している。
