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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • flutter byte(Unit8List) 转 ios Uint8[] 转 c语言char*

    flutter byte(Unit8List) 转 ios Uint8[] 转 c语言char*最近用flutter写ios线上项目,有一个功能让把设备传来的数据加密,而这个坑爹的加密的方法是c语言写的,用flutter各种尝试,始终不能还原c的加密过程,只能调用ios原生代码,然后用原生代码调用c语言加密,然后将加密的数据返回过程是这么个过程,但是3种语言的类型各不相同,所以中间就出现来各种转换,本人一个安卓屌丝,碰到swift和c语言也是一脸懵逼,很简单的东西我搞了2天,先看…

  • PLSQL注册码

    PLSQL注册码进入帮助->注册,输入:产品编号:kfsvzt6zh2exaxzxgjk44rv5kp2yp68vgk序列号:186220口令:xs374ca直接获得9999-12-31,美滋滋

  • ecshop添加菜单以及权限分配

    ecshop添加菜单以及权限分配

  • 布隆过滤器原理简介视频_布隆过滤器误判怎么办

    布隆过滤器原理简介视频_布隆过滤器误判怎么办目录1.布隆过滤器简介2.布隆过滤器的实现思路3.布隆过滤器的公式4.实际应用场景1.布隆过滤器简介布隆过滤器(BloomFilter)是由一个很长的bit数组和一系列哈希函数组成的。本质上是一种数据结构,比较巧妙的概率型数据结构。它的特点是高效地插入和查询,并且根据查询结果可以知道某样东西一定不存在或者可能存在。相比于传统的List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的,同时布隆过滤器还有一个缺陷就是数据只..

  • 把war包放到Tomcat安装文件夹下,不能直接訪问的解决方式

    把war包放到Tomcat安装文件夹下,不能直接訪问的解决方式

  • 详细介绍scrollIntoView()方法属性

    详细介绍scrollIntoView()方法属性因为工作中用到了锚点设置,常用的总是出问题,后来扒拉出了这个属性,详细研究了下方便日后使用介绍scrollIntoView()的详细属性简介该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。PS:根据其他元素的布局,元素可能无法完全滚动到顶部或底部。TIPS:页面(容器)可滚动时才有用!语法element.scrollIntoView();//等同于element.scrollIntoView(true)element.scrollIntoV

发表回复

您的电子邮箱地址不会被公开。

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