【MQTT】MQTT 开发笔记(python) - Go语言中文社区

【MQTT】MQTT 开发笔记(python)


MQTT 向别人介绍的简单教程

https://www.cnblogs.com/xiaoyehack/p/9916817.html

 

2019.05.30 安装新的mysqlclient

报错mysql_config: command not found

 

运django 报错:ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

pip install mysqlclient   安装最新

 

2019.05.30django

要在上面安装django,直接用命令 pip install django 安装

判断是否安装成功:

[root@Lrw888 ~]# python
>>> import djangoo
>>> django.get_version()
'2.2.1'
>>> 

返回2.2.1 表示安装成功2.2.1版本

2019.05.24

发现 操作数据库的程序 隔一段时间 没有插入数据成功,原理是mysql链接默认设置8小时没有数据插入就自动关闭链接。

 

demo 客户端确实经常8小时没有数据插入,所以设置数据库8小时断开改为 21天。

wait_timeout=31536000

interactive_timeout=31536000

 

2019.05.20安装anaconda

C++/C 写MQTT客户端实在太啰嗦了,决定用python来写。

安装anaconda3,安装后python -v 依然显示2.6版,原来是还有配置路径:


 vim ~/.bashrc ,在文件最后加上 export  PATH="/root/anaconda3/bin:$PATH" 即可,注意,此处只是演示,具体路径需根据自己安装的位置进行更改。
第三步:安装好以后,输入命令,使环境变量生效 :source ~/.bachrc,然后重启终端

 

 

 

2019.05.15 下载下来的client 库是动态库.so,要编程静态库。

1、需要安装openssl和openssl-devel

https://blog.csdn.net/thanklife/article/details/55097429

网络安全:https://www.cnblogs.com/bhlsheji/p/4586597.html

 

 

MQTT服务器

 

选择了轻量的Mosquitto

运行:mosquitto -c /etc/mosquitto/mosquitto.conf -d

Mosquitto简要教程(安装/使用/测试):https://blog.csdn.net/shagoo/article/details/7910598

1‘MQTT的局限:

MQTT客户端C代码:https://www.jianshu.com/p/d309de966379

 

http://www.cnblogs.com/star91/p/4889820.html《菜鸟是如何打造智能家居系统的》

https://www.cnblogs.com/star91/p/5002297.html

Paho -物联网 MQTT C Cient的实现和详解》

https://www.cnblogs.com/homejim/p/8196763.html

客户端代码库:

https://www.eclipse.org/paho/downloads.php

《Paho MQTT C Client Library》

http://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html

 

 

 

测试工具

可视化工具:

MQTTBox ,MQTTBox有两种使用的方式:一种为Chrome插件;另外一种为Windows程序安装。

安装步骤

1)下载安装软件:读者可以根据自己的喜好,下载不同的版本:此处为Chrome版本的下载地址(需翻墙);此处为Windows安装程序

2)根据安装向导的提示,完成MQTTBox的安装

3)打开安装好的应用图标,如下图所示

测试消息发布/订阅(Pub/Sub)功能

MQTT协议中通过主题(Topic)在消息发布者和

1)建立MQTT连接,如下图所示,点击“Create MQTT Client”

2)指定连接相关信息,包括连接名称(可以随意输入)、协议(选择mqtt/tcp)和主机地址(安装在本地,MQTT缺省端口为1883,所以输入127.0.0.1:1883),然后单击“Save”保存。连接中一些别的选项先保持缺省值,读者对MQTT协议比较熟悉之后,就可以了解这些选项的意义。

保存成功后进入如下的界面,接下来可以开始测试消息发布和订阅。如下图所示,绿色“Connected”按钮表明当前MQTT连接已经成功

3)首先我们开启一个订阅,如下图所示。“Topic to subscribe”里填入要订阅的主题“windows”;“QoS”字段选择“0 - Almost Once”;然后点击“Subscribe”按钮

4)设置好订阅的主题后,在发布这边输入如下的信息。“Topic to publish”中输入“windows”,这里输入的主题的名字必须和订阅那里的输入相同;“QoS”中选择“0 - Almost Once”;“Payload”中输入任何内容都可以,如下图所示输入了一组JSON字符串;所有内容输入完毕之后,点击“Publish”按钮

5)在订阅端就会收到由服务器端转发的消息内容,如下图所示。

6)打开EMQ的管理员控制台,可以看到一些相关的统计数据已经发生了变化。比如在“The messages data”表格中,“qos0/received”的值为1,说明EMQ收到了1条QoS0的消息;“qos0/sent”的值为1,表示EMQ转发了一条QoS0的消息。

好了,EMQ君带领着大家初步领略了MQTT服务器能够提供的基本功能,如果读者想了解其它MQTT服务器在不同平台上的安装的话,请参考以下系列文章。

Ubuntu上搭建EMQ MQTT服务器

Ubuntu上搭建EMQ Mosquito服务器

Ubuntu上搭建EMQ Apollo服务器

Windows上搭建Mosquitto MQTT服务器

Windows上搭建Apache Apollo MQTT服务器

 

小礼物走一走,来简书关注我



作者:EMQ
链接:https://www.jianshu.com/p/e5cf0c1fd55c
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

 

MQTT的简洁说明:

一、了解MQTT基本知识

1.在MQTT通讯过程中,有三种身份,分别是发布者(publisher)、代理(broker)、和订阅者(subscriber)。

2.MQTT传输的消息分为:主题(topic)和负载(payload)两部分:

  • Topic,为消息的类型,是由客户端发布时指定的,当另外一个客户端订阅(subscribe)主题后,就会收到该主题的消息内容(payload)。
  • payload当然就是内容了,它和主题一样都存在数据包(packet)中。

3.当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。

QoS在MQTT中有(摘自MQ 遥测传输 (MQTT) V3.1 协议规范):

  • qos 0 “至多一次”,由于消息发布完全依赖底层 TCP/IP 网络,会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • qos 1 “至少一次”,确保消息到达,但消息重复可能会发生。
  • qos 2 “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

MQTT.js只是支持了MQTT协议,并没有支持QoS,也就是说,只支持最低级别的“至多一次”(QoS0)。

4.在MQTT客户端上干什么?

  • 发布其他客户端会订阅的信息
  • 订阅其它客户端发布的消息
  • 退订或删除应用程序的消息
  • 断开与服务器连接。

5.MQTT服务器又干什么?

  • 接受来自客户的网络连接
  • 向订阅的客户转发应用程序消息

6.MQTT协议数据包(packet)结构

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。
这里只了解消息体,固定头和可变头并不需要我们手动写。
payload消息体包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息:

  • CONNECT,消息体内容主要是:客户端的ClientID、订阅的Topic、Message以及用户名和密码。
  • SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。
  • SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
  • UNSUBSCRIBE,消息体内容是要订阅的主题。

7.MQTT协议规定的方法(重要,无论在那个框架里这是通用的)

(1)Connect    与服务器建立连接。
(2)Disconnect    与服务器断开TCP/IP会话。
(3)Subscribe    订阅。
(4)UnSubscribe    取消订阅。
(5)Publish    发送消息请求,发送完成后返回应用程序线程。
二、实现(具体的API稍后呈现)

 

客户端1:(发布消息)
let mqtt = require('mqtt')
let client = mqtt.connect('mqtt://localhost:233')

client.on('connect', () => {
    setInterval(function() {
        let message = new Date().toLocaleString()
        //每隔1s发布主题为dialog的消息
        client.publish('dialog', message, {
            qos: 0,         //可以丢失
            retain: false   //不保留
        })
    }, 1000)
})

 

客户端2:(接收消息)
let mqtt = require('mqtt')
let client = mqtt.connect('mqtt://localhost:233')

client.on('connect', () => {
    //订阅主题为dialog的消息
    client.subscribe('dialog')
})
client.on('message', (topic, message) => {
    //打印主题
    console.log(topic)
    //打印消息,是buffer形式
    console.log(message.toString())
})

 

服务端:
const mosca = require('mosca');
let settings = {
    port: 233,
};
let server = new mosca.Server(settings);

server.on('ready', () => {
    console.log('server is running');
});
server.on('clientConnected', (client) => {
    console.log(client);
});
server.on('published', (packet, client) => {
    //服务器作为中转站,可以打印数据包中的内容
    console.log(packet.payload);
})

 

运行结果


三、具体API(时间不够,我先不写了)
先放几个链接日后我自行翻译:
mosca的http://www.mosca.io/docs/lib/server.js.html#Server
mqtt.js的https://www.npmjs.com/package/mqtt#api
mqtt中文协议:https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details,没什么用啊用别人框架都不需要这个

作者:lhdoeo
链接:https://www.jianshu.com/p/b452e2cee0d6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/bandaoyu/article/details/90231604
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 09:47:56
  • 阅读 ( 886 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢