zoukankan      html  css  js  c++  java
  • 转 【MQTT】在Windows下搭建MQTT服务器

    MQTT简介

    MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有:

    • 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
    • 对负载内容屏蔽的消息传输。
    • 使用 TCP/IP 提供网络连接。
    • 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
    • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
    • 有三种消息发布服务质量: 
      • “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
      • “至少一次”,确保消息到达,但消息重复可能会发生。
      • “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

     

    Mosquitto是一款「An Open Source MQTT v3.1/v3.1.1 Broker」——开源的MQTT代理服务器,其下也有Windows的安装包。

    Mosquitto

    但是我使用的是Win10 64位系统,这两个都下载安装后不是报错就是缺少dll文件,不能使用。

    最后参考了前面博客说的,搭建了Apollo服务器,这里使用的Apollo 1.7.1。

    搭建MQTT服务器

    使用Apollo搭建MQTT服务器步骤:

    1. 下载Apollo服务器并解压,在CMD环境运行其工作目录下的...inapollo.cmd,命令后面带上参数「create mybroker」,创建服务器实例。这里需要Java环境,系统环境变量下要有JAVA_HOME。
    2. 创建实例之后会在bin目录下生成mybroker文件夹,其中 ...etcapollo.xml文件下是配置服务器信息的文件,...etcusers.properties文件包含连接MQTT服务器时用到的用户名和密码,初始默认帐号是admin,密码password;
    3. 进入...mybrokerin 目录,在CMD输入命令「apollo-broker.cmd run」,可以使用TAB键自动补全,运行后输出信息如下:

    MQTT服务运行信息

    其中我们要留意的:

    MQTT服务器TCP连接端口:tcp://0.0.0.0:61613

    后台Web管理页面:https://127.0.0.1:61681/http://127.0.0.1:61680/

    登录服务器后,如果MQTT服务器有客户端连接,后台会显示如下

    后台

    Python的MQTT客户端

    在Python环境下有MQTT客户端包——paho-mqtt。

    安装命令

    pip install paho-mqtt
    

      

    客户端代码清单

    下面是MQTT客户端代码清单

    import paho.mqtt.client as mqtt
    
    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
    
        client.subscribe("lettuce")
    
    def on_message(client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
    
    client = mqtt.Client()
    client.username_pw_set("admin", "password") # 必须设置,否则会返回「Connected with result code 4」
    client.on_connect = on_connect
    client.on_message = on_message
    
    HOST = "127.0.0.1"
    
    client.connect(HOST, 61613, 60)
    client.loop_forever()
    

      

     

    下面是往M

    发布消息代码

    QTT服务器发布消息的代码

    import paho.mqtt.publish as publish
    
    HOST = "127.0.0.1"
    
    publish.single("lettuce", "payload", hostname=HOST, port=61613,
                   auth={'username': "admin", 'password':"password"})
    

      

    .


    更新

    2017年7月28日更新:

    最近发现了一款比较好的开源MQTT服务器:EMQ。Linux下部署教程可以参考这篇文章:EMQ初体验——在CentOS7上部署MQTT服务器

    Windows下部署可以到官网查阅相关资料。

    2017年8月15日更新:

    注意:后台Web管理页面被设置为只能本地访问,如果想用其他主机访问该管理页面,需要修改「http://127.0.0.1:61680/」为「http://0.0.0.0:61680/」。

    相关配置文件:apache-apollo-1.7.1inmybrokeretcapollo.xml,大约61行:

    <web_admin bind="http://127.0.0.1:61680"/>
    <web_admin bind="https://127.0.0.1:61681"/>
  • 相关阅读:
    Java实现 LeetCode 32 最长有效括号
    Java实现 LeetCode 31下一个排列
    Java实现 LeetCode 31下一个排列
    Java实现 LeetCode 31下一个排列
    Java实现 蓝桥杯 素因子去重
    Java实现 蓝桥杯 素因子去重
    Java实现 蓝桥杯 素因子去重
    Java实现 LeetCode 30 串联所有单词的子串
    Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法
    MFC不使用对话框资源模版创建对话框
  • 原文地址:https://www.cnblogs.com/saryli/p/8964145.html
Copyright © 2011-2022 走看看