2-MQTT ubuntu window下测试

    技术2022-07-12  68

    在学习MQTT的代码之前,先使用ubuntu实际测试一遍,加深其使用场景和过程。

    mosquitto是一个开源的轻量级的C实现,完全兼容了MQTT 3.1和MQTT 3.1.1,在嵌入式系统上比较常用,这边介绍ubuntu上的安装使用,后面openwrt上也是使用mosquitto。

    1. ubuntu上面安装mqtt

    引入mosquitto仓库并更新 $sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa $sudo apt-get update 执行以下命令安装mosquitto包 $sudo apt-get install mosquitto 安装mosquitto开发包 $sudo apt-get install libmosquitto-dev 安装mosquitto客户端 $sudo apt-get install mosquitto-clients 查询mosquitto是否正确运行 $sudo service mosquitto status

    2. 发布订阅测试

    mosquitto安装完之后,有两个命令行工具,发布mosquitto_pub和订阅mosquitto_sub

    mosquitto_pub 命令参数说明

    1. -d 打印debug信息 2. -f 将指定文件的内容作为发送消息的内容 3. -h 指定要连接的域名 默认为localhost 4. -i 指定要给哪个clientId的用户发送消息 5. -I 指定给哪个clientId前缀的用户发送消息 6. -m 消息内容 7. -n 发送一个空(null)消息 8. -p 连接端口号 9. -q 指定QoS的值(0,1,2) 10. -t 指定topic 11. -u 指定broker访问用户 12. -P 指定broker访问密码 13. -V 指定MQTT协议版本 14. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 15. --will-qos Will的QoS值。该参数需要与--will-topic一起使用 16. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用 17. --will-topic 用户发送Will消息的topic

    mosquitto_sub 命令参数说明

    1. -c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。 2. -d 打印debug信息 3. -h 指定要连接的域名 默认为localhost 4. -i 指定clientId 5. -I 指定clientId前缀 6. -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。 7. -q 指定希望接收到QoS为什么的消息 默认QoS为0 8. -R 不显示陈旧的消息 9. -t 订阅topic 10. -v 打印消息 11. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 12. --will-qos Will的QoS值。该参数需要与--will-topic一起使用 13. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用 14. --will-topic 用户发送Will消息的topic

    先打开一个终端,ubuntu订阅local/test

    ubuntu:~$ mosquitto_sub -t "local/test" -h 127.0.0.1 -p 1883 -d -i ubuntu_client1 Client ubuntu_client1 sending CONNECT Client ubuntu_client1 received CONNACK (0) Client ubuntu_client1 sending SUBSCRIBE (Mid: 1, Topic: local/test, QoS: 0, Options: 0x00) Client ubuntu_client1 received SUBACK Subscribed (mid: 1): 0

    ubuntu发送

    ubuntu:~$ mosquitto_pub -t "local/test" -m "{test:111}" -h 127.0.0.1 -p 1883 -d -i ubuntu_client2 Client ubuntu_client2 sending CONNECT Client ubuntu_client2 received CONNACK (0) Client ubuntu_client2 sending PUBLISH (d0, q0, r0, m1, 'local/test', ... (10 bytes)) Client ubuntu_client2 sending DISCONNECT linye@linye-ubuntu:~$

    mosquitto_pub的终端发送后,mosquitto_sub终端就会收到如下信息

    Client ubuntu_client1 sending PINGREQ Client ubuntu_client1 received PINGRESP Client ubuntu_client1 received PUBLISH (d0, q0, r0, m0, 'local/test', ... (10 bytes)) {test:111}

    3. window下使用python测试

    ubuntu的和window下的python进行互相测试。ubuntu订阅local/test1,发布local/test2,python订阅local/test2,发布local/test1。

    ubuntu下面有mqtt服务器

    linye@ubuntu:~$ ps -aux | grep mos mosquit+ 815 0.0 0.0 37352 2644 ? Ss 08:51 0:02 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

    先打开一个终端,ubuntu订阅local/test1

    ubuntu:~$ mosquitto_sub -t "local/test2" -h 127.0.0.1 -p 1883 -d -i ubuntu_client1 Client ubuntu_client1 sending CONNECT Client ubuntu_client1 received CONNACK (0) Client ubuntu_client1 sending SUBSCRIBE (Mid: 1, Topic: local/test, QoS: 0, Options: 0x00) Client ubuntu_client1 received SUBACK Subscribed (mid: 1): 0

    python订阅local/test2,发布local/test1

    #!/usr/bin/python3 # -*- coding:utf-8 -*- # Author: ye.lin # Time: 2019/10/21 # Describe: import logging import json import paho.mqtt.client as mqtt from paho.mqtt.client import Client MQTTHOST = "192.168.62.128" MQTTPORT = 1883 mqttClient: Client = mqtt.Client() def logging_init(): logging.basicConfig( # filename="log/test.log", # 指定输出的文件 level=logging.DEBUG, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') return True # 连接MQTT服务器 def on_mqtt_connect(): conn_result = mqttClient.connect(MQTTHOST, MQTTPORT, 15) logging.info(conn_result) mqttClient.loop_start() # mqttClient.loop_forever() # publish 消息 def on_publish(topic, payload, qos): mqttClient.publish(topic, payload, qos) # 消息处理函数 def on_message_come(lient, userdata, msg): print(msg.topic + " " + ":" + str(msg.payload)) # subscribe 消息 def on_subscribe(): mqttClient.subscribe("local/test2", 1) mqttClient.on_message = on_message_come # 消息到来处理函数 if __name__ == '__main__': logging_init() on_mqtt_connect() publish_data = { "test": "1111", "clientId": "XXXXX" } publist_result = on_publish("local/test1", json.dumps(publish_data), 0) logging.info(publist_result) on_subscribe() while True: pass

    再打开一个终端,ubuntu发送local/test2

    ubuntu:~$ mosquitto_pub -t "local/test2" -m "{test:111}" -h 127.0.0.1 -p 1883 -d -i ubuntu_client2 Client ubuntu_client2 sending CONNECT Client ubuntu_client2 received CONNACK (0) Client ubuntu_client2 sending PUBLISH (d0, q0, r0, m1, 'local/test', ... (10 bytes)) Client ubuntu_client2 sending DISCONNECT linye@linye-ubuntu:~$

    3. window下使用eclipse paho软件测试

    window下可以使用eclipse paho软件测试mqtt通讯

    官网可以下载:https://www.eclipse.org/paho/

    具体使用就不介绍了,看页面就大概知道了。

    Processed: 0.009, SQL: 9