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

2022-08-24 14:43:38 浏览数 (1)

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

就让我来试试传说中最适用于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.cn/140313.html原文链接:https://javaforall.cn

0 人点赞