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