Windows上にMQTTブローカーサーバーを構築し、Pythonを使用してパブリッシュおよびサブスクライブメッセージの使用をテストするだけです。

****

前書き

**
MQTT(Message Queuing Telemetry Transport)は、IBMによって開発されたインスタントメッセージングプロトコルです。低帯域幅で信頼性の低いネットワークでのリモートセンサーおよび制御デバイス通信に適しています。ますますインターネットオブシングスになりつつあります。通信プロトコル。MQTTは現在、主にインスタントメッセージング、モノのインターネットM2M、モノのインターネットコレクションなどに使用されています。この記事では、一般的なオペレーティングシステムでのコミュニティにおける一般的なオープンソースMQTTサーバーの構築について詳しく説明します。現在、いくつかのオープンソースMQTTサービスミドルウェアは次のとおりです。

  • 1)EMQX:github 6.3kスター(インストールなしのバージョンのダウンロードリンク:https://www.emqx.io/downloads/broker/v4.1.0/
  • 2)モスキート:github3.9kつ星
  • 3)Apollo:ActiveMQのアップグレードバージョンであるgithub 138スターですが、プロジェクトは3〜4年間更新されていません。それが主張するActiveMQの古いバージョンは、より頻繁に更新されます。

EMQサーバーはWindows上に構築されています

EMQ(Erlang / Enterprise / Elastic MQTT Broker)は、Erlang / OTPプラットフォームに基づいて開発されたオープンソースのIoTMQTTメッセージサーバーです。Erlang / OTPは、優れたソフトリアルタイム、低レイテンシ、分散言語プラットフォームです。一般的に、本番環境のMQTTサービスはLinuxオペレーティングシステム上に構築することをお勧めしますが、検証と使用の段階として、一般的なWindowsプラットフォーム上で構築、実行、テストすることができます。
****

インストール手順

****

  • 1)EMQ Windowsバージョンをダウンロードするには、ここをクリックしてください
  • 2)emqttd-windows7-v2.3.9.zipを解凍します(ここではDドライブに解凍されます)
  • 3)Windowsコマンドラインウィンドウを開き、解凍emqx \ binのディレクトリを入力します
  • 4)WindowsコマンドラインでEMQを起動し、次のコマンドを実行しますemqx.cmd start
    ここに画像の説明を挿入
  • 5)EMQは、ユーザーが
    サーバーの実行ステータス、統計データ、クライアント、セッション、トピック、サブスクリプション、プラグイン(プラグイン)表示できるバックエンドWebコンソールを提供します。このマシンにEMQがインストールされている場合は、ブラウザでhttp://127.0.0.1:18083 ***を開き、デフォルトのユーザー名「admin」とデフォルトのパスワード「public」 *を入力してEMQ管理コンソールに入ります。次の図に示すように、「Stats(1)」テーブルには、クライアントとトピックに関するいくつかの基本情報が表示されます。たとえば、「Clients / Count」の数は0であり、現在接続されている数を意味します。クライアントは0です。「クライアント/最大」は、接続がこれまでに到達した最大値などを示します。ここでは、各項目を1つずつ紹介することはしません。読者がMQTTプロトコルに慣れると、監視ダッシュボードの内容を理解できるようになります。
    (Webブラウザーは、次のインターフェースにアクセスして、インストールが成功したことを示すことができます)
    ここに画像の説明を挿入

以下では、Pythonを使用して、メッセージの公開とサブスクライブをテストしています。

まず、mqttモジュールをインストールする必要があります。pip install paho-mqtt

クライアントコードを公開するpub.py

import paho.mqtt.client as mqtt

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('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.publish('fifa', payload='amazing', qos=0)

サブスクリプションクライアントコードsub.py

import paho.mqtt.client as mqtt

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.on_disconnect = on_disconnect
client.connect('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.subscribe('fifa', qos=0)
client.loop_forever() # 保持连接

================================================== =========================

別のテスト方法では、パブリッシングが使用された後、サブスクライバーはパブリッシャーのメッセージを監視するために長い接続を維持します。これは実際には上記と同じです。

# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import json
import time

HOST = "127.0.0.1"
PORT = 1883
# client_id = ""                       # 没有就不写,此处部分内容用xxx代替原内容,下同

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("data/receive")         # 订阅消息


def on_message(client, userdata, msg):
    print("主题:"+msg.topic+" 消息:"+str(msg.payload.decode('utf-8')))


def on_subscribe(client, userdata, mid, granted_qos):
    print("On Subscribed: qos = %d" % granted_qos)


def on_disconnect(client, userdata, rc):
    if rc != 0:
        print("Unexpected disconnection %s" % rc)

data = {
    
    
    "type":2,
    "timestamp": time.time(),
    "messageId":"9fcda359-89f5-4933-xxxx",
    "command":"xx/recommend",
    "data":{
    
    
        "openId":"xxxx",
        "appId":'xxxx',
        "recommendType":"temRecommend"
    }
}
param = json.dumps(data)
client = mqtt.Client()
client.username_pw_set("user")
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.connect(HOST, PORT, 60)
client.publish("data/send", payload=param, qos=0)     # 发送消息
client.loop_forever()

接続が成功した後のトピック情報
ここに画像の説明を挿入
、ありがとう!

おすすめ

転載: blog.csdn.net/qq_43030934/article/details/107638059
おすすめ