Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

IoT時代を支えるプロトコル「MQTT」(中編)

システム環境の明後日を支える新技術(5)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/09/23 14:00

 本連載では、さくらインターネット研究所が独自に調査研究を行った3~5年先に必要とされる新技術とその在り方についてご紹介いたします。「明日にでも、すぐ実用!」という技術ではなく、少し先の未来の技術について情報共有致しますので、タイトルを「明後日の~」としています。今回は前回の『IoT時代を支えるプロトコルMQTT(前編)』でご紹介しましたMQTT(MQ Telemetry Transport)について、さらに詳しく見ていきましょう。

目次

MQTTにおけるシステム設計

 前回は簡単な動作検証を行うため、MQTTを取り巻くシステムの仕組みについて解説をしていませんでしたので、今回は「MQTTにおけるシステム設計」の基礎から見ていきましょう。MQTTはPub/Sub(Publish/Subscribe)モデルのシステムで、メッセージ発行元とメッセージ購読者をブローカがトピックごとにつなぎます(図1)。

図1. MQTTのシステム基本理解
図1. MQTTのシステム基本理解

 PublisherおよびSubscriberは異なるトピックであってもBrokerを共有することができるため、用途に応じてMQTTの仕組みを共有することができます。

 つづいて、Publisher, Broker, Subscriberの基本動作について確認していきましょう。

 MQTT経由でのPublisherおよびSubscriberのやり取りはBrokerへの登録作業から始まります。いずれも共有するトピックにおいてメッセージ発行とメッセージ購読の登録が開始されます。その上でトピックごとのメッセージがメッセージ発行元であるPublisherからメッセージ購読者であるSubscriberへと伝搬するのです(図2)。

図2. MQTTのシステム動作原理
図2. MQTTのシステム動作原理

 前回はSubscriberの動作をみてきましたので、今回はPublisherの動作について見ていきましょう。図3は、MQTT Pythonライブラリを使ったClient/Publisher接続のプログラム例です。

 今回もインターネット上で公開されているオープンなMQTTテスト環境であるtest.mosquitto.orgを利用します。このプログラムでは、Brokerに対してトピックを"test"として、一定間隔で時刻情報をPublisher側からメッセージ発行します。実際のIoT(Internet of Things)ではメッセージ発行の内容に、温度や加速度などさまざまなセンサーからの入力情報が入ることになるでしょう。

図3. MQTT Pythonライブラリを使ったClient/Publisher接続のプログラム例
C:\test> notepad pub-mqtt.py    ※Windowsのメモ帳を使ってプログラム作成
# coding=utf8
import paho.mqtt.client as mqtt
import time

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883)

while client.loop() == 0:
    msg = "test message from Publisher "+time.ctime()
    client.publish("test", msg, 0, True)
    print("message published")
    time.sleep(1.5)
    pass

 それでは準備が整ったら。すぐに接続してみましょう(図4)。

図4. MQTT Pythonライブラリを使ったClient/Publisher接続の実行例
C:\test> py pub-mqtt.py
Connected with result code 0
message published
message published
message published
message published
message published

 これでメッセージ発行完了です。ですが、これでは皆様も釈然としないかと思いますので、こちらも前回同様にプロトコル詳解をネットワークアナライザであるWiresharkを使って見ていきましょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 松本 直人(マツモト ナオト)

    1996年より特別第二種通信事業者のエンジニアとしてインターネット網整備に従事。その後システム・コンサルタント,ビジネス・コンサルタントを経て2010年より,さくらインターネット株式会社 / さくらインターネット 研究所 上級研究員。(2016年より一時退任) 研究テーマはネットワーク仮想化など。...

バックナンバー

連載:システム環境の明後日を支える新技術

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5