python下mqtt服务器的搭建_搭建MQTT服务器

python下mqtt服务器的搭建_搭建MQTT服务器就让我来试试传说中最适用于IOT的MQTT协议。安装虽然搜索资料很多,但大多是MQTT的使用,尽管有搭建服务器的文章,但我感觉写的不太清楚,大多数文章选择了Mosquitto(也许是Eclipse大厂出品的原因)。经过寻找,找到了Nodejs写的mosca,但在Pi上老是安装失败,翻了翻Issues,找到了同作者写的依赖性小,轻量化的aedes。npminstallaedes–save//…

大家好,又见面了,我是你们的朋友全栈君。

就让我来试试传说中最适用于IOT的MQTT协议。

安装

虽然搜索资料很多,但大多是MQTT的使用,尽管有搭建服务器的文章,但我感觉写的不太清楚,大多数文章选择了Mosquitto(也许是Eclipse大厂出品的原因)。

经过寻找,找到了Nodejs写的mosca,但在Pi上老是安装失败,翻了翻Issues,找到了同作者写的依赖性小,轻量化的aedes。npm install aedes –save//最小例子

var aedes = require(‘aedes’)();

var server = require(‘net’).createServer(aedes.handle);

server.listen(8266);

简单使用

将所有的订阅与推送保存到sqlite3数据库中://Nodejs

var aedes = require(‘aedes’)();

var colors = require(‘colors’);

var server = require(‘net’).createServer(aedes.handle);

var sqlite3 = require(‘sqlite3’).verbose();

var db = new sqlite3.Database(‘data.db’);

var port = 8266;

//更多事件查看Github:https://github.com/mcollina/aedes

aedes.on(‘publish’,function(packet,client) {

if (client) {

console.log(‘[ Publish ] CilentID:’.green,client.id,’ Qos:’.green,packet.qos,’ Data:[ ‘.green,String(packet.payload),’ ]’.green);

db.run(“INSERT INTO publish (date,client_id,topic,data) VALUES (datetime(‘now’),?,?,?);”,[client.id,packet.topic,String(packet.payload)]);

}

});

aedes.on(‘subscribe’, function (subscriptions, client) {

if (client) {

//subscriptions懒得历遍(一般情况同时只有一个吧)

db.run(“INSERT INTO subscribe (date,client_id,topic) VALUES (datetime(‘now’),?,?)”,[client.id,subscriptions[0].topic]);

console.log(‘[ Subscribe ] SubscripTions:’.green,subscriptions[0].topic,’ Qos:’.green,subscriptions[0].qos,’ CilentID:’.green,client.id);

}

});

aedes.on(‘unsubscribe’,function(unsubscriptions,client){

if(client){

//同理

console.log(‘[ unSubscribe ] unSubscripTions:’.green,unsubscriptions[0],’ CilentID:’.green,client.id);

db.run(“DELETE FROM subscribe WHERE client_id = ? AND topic = ?;”,[client.id,unsubscriptions[0]])

}

});

server.listen(port,function(){

console.log(‘[ Server ] server listening on port’.green,port)

});

//Sqlite3

CREATE TABLE “publish” ( `date` TEXT NOT NULL, `client_id` TEXT NOT NULL, `topic` TEXT NOT NULL, `data` TEXT NOT NULL );

CREATE TABLE “subscribe” ( `date` TEXT NOT NULL, `client_id` TEXT NOT NULL, `topic` TEXT NOT NULL );

//Micropython for ESP8266

>>> from umqtt.simple import MQTTClient

>>> conn = MQTTClient(‘esp8266′,’192.168.1.64’,8266)

>>> conn.connect()

0

>>> conn.publish(b’/test’,b’test’)

>>> conn.disconnect()

优缺点轻量化

可以更好的结合业务逻辑

不支持或不完全支持Qos2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140313.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#使用NPOI 导出Excel

    C#使用NPOI 导出ExcelC#使用NPOI导出Excel首先需要添加NPOI的引用//创建Excel文件的对象HSSFWorkbookbook=newHSSFWorkbook();//添加一个sheetIRowrow2=sheet1.CreateRow(0);row2.CreateCell(0).SetCellValue(“序号”);row2.CreateCell(1).SetC

    2022年6月17日
    22
  • ASSERT_VALID_assert语句

    ASSERT_VALID_assert语句ASSERT()ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在Release版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在Release版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏VERIFY(),以保证表达式中的函数调用在Release版本中会被正确求值…

    2022年9月6日
    3
  • javaScript — touch事件详解(touchstart、touchmove和touchend)

    HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。一开始触摸事件touchstart、touchmove和touchend是iOS版Safari浏览器为了向开发人员传达一些信息新

    2022年4月9日
    45
  • document.visibilityState 和 visibilitychange 事件结合优化性能「建议收藏」

    document.visibilityState 和 visibilitychange 事件结合优化性能「建议收藏」一般在项目中,用户登录之后有消息通知的时候,用户头像上面会有一个消息数来提醒用户,但这个数字要保证新打开一个页面的时候是正确的,当切换浏览器的tab再回来的时候还要保证正确性。说到这可能有人觉得放一个定时器,过一段时间去获取一次不就可以了,但这样会相当耗性能,使用定时器,这个页面就算被隐藏(非当前标签页、最小化)也会去一直执行这个定时器,这就相当消耗资源,而且这个页面放很久的话,还会造成页面卡死…

    2022年6月18日
    24
  • 二阶微分方程龙格库塔法_二阶龙格库塔法公式

    二阶微分方程龙格库塔法_二阶龙格库塔法公式一、计算公式对于形如以下的常微分方程:采用四阶龙格库塔法的计算公式:四阶龙格库塔法精度为4,属于单步递推法。单步递推法的基本思想是从(x(i),y(i))点出发,以某一斜率沿直线达到(x(i+1),y(i+1))点。二、实例计算对于下述二阶方程:f(q)为分段函数1、基本思想:令位移q为y(1),q的一阶导dq/dt为y(2),因此可得:dq/dt=y(2)令f(q)=fy令q的二阶导ddq/dt^2=-2*eptheton*y(2)-fy+Fm

    2025年5月22日
    0
  • jdk8 hashmap线程安全吗_Python中的线程

    jdk8 hashmap线程安全吗_Python中的线程前言只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap是线程不安全的呢,之前面试的时候也遇到到这样的问题,但是当时只停留在***知道是***的层面上,并没有深入理解***为什么是***。于是今天重温一个HashMap线程不安全的这个问题。首先需要强调一点,HashMap的线程不安全体现在会造成死循环、数据丢…

    2022年10月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号