1.用mosquitto+paho+protobuf实现mqtt的源码示例代码
2.在树莓派中使用 MicroPython 接入 MQTT
3.如何搭建自己的MQTT服务器
4.windows下paho.mqtt安装教程(C/C++)
5.编写基于paho-mqtt-c客户端用openssl证书连接mqtt broker
6.Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
用mosquitto+paho+protobuf实现mqtt的源码示例代码
mqtt通信示例代码利用mosquitto+paho+protobuf实现。mosquitto是源码一款轻量级的mqtt服务器实现,适用于多种环境。源码示例代码中,源码服务器搭建在阿里云服务器上,源码piwigo 源码使用mosquitto和mosquitto-clients工具,源码安装命令为:
sudo apt install mosquitto mosquitto-clients
验证服务是源码否启动,如未启动,源码使用命令
sudo systemctl start mosquitto
启动服务。源码实现客户端与服务器间的源码通信时,使用
mosquitto_sub -h localhost -p -t "demo/1"
进行订阅,源码和
mosquitto_pub -h localhost -p -t "demo/1" -m "test"
进行发布。源码在topic配置中,源码使用"/"进行划分,源码支持单层通配符("+")和多层通配符("#")来匹配特定主题。
服务器配置在/etc/mosquitto/mosquitto.conf文件下,或在/etc/mosquitto/conf.d/目录下的port.conf文件中,可以自定义监听端口。配置密码文件使用命令
sudo mosquitto_passwd -c /etc/mosquitto/passwd username
,允许匿名访问可通过修改配置文件来实现。
对于c++部分,使用mosquitto库与protobuf结合,完成消息订阅与发布。代码示例在GitHub上提供,包含在proto目录下的proto文件、src目录下的pub_simple.cpp和sub_callback.cpp文件。在proto目录下生成消息定义,src目录下的文件执行发布与订阅操作。为了简化编译过程,提供了一个脚本,确保用户能够轻松获取所需库文件,无论是树莓派还是服务器上都能顺利运行。
paho库是多平台多语言的mqtt客户端库,支持多种编程语言,具备丰富的示例代码和文档,适合集成于其他语言的项目中。对于c/c++项目,使用mosquitto库已经足够高效,硬盘安装器源码paho在某些特定场景下使用可能较为复杂,不如直接使用mosquitto库来得简便。
完整的c++mosquitto客户端使用protobuf进行消息发布和订阅的代码位于GitHub仓库中,提供了一个完整的示例环境,用户可直接运行,无需额外编译步骤,适配于多种开发环境。
在树莓派中使用 MicroPython 接入 MQTT
在树莓派上利用 MicroPython 连接 MQTT:一个轻量级物联网解决方案
树莓派,由英国树莓派基金会开发的微型计算机主板,凭借其 ARM 架构、USB 和以太网接口,以及集成的 Wi-Fi、蓝牙和 GPIO,被广泛应用于教学、娱乐和物联网领域。MicroPython,作为 Python 3 的轻量级版本,由 C 语言编写,专为微控制器设计,提供了交互式REPL和有限的核心库,可直接操作硬件资源。
MQTT,作为一种轻量级的发布/订阅协议,适合资源受限的设备和网络环境,尤其在物联网领域大显身手。它能以极简代码和带宽提供实时、可靠的消息服务。本文将教你如何在树莓派上用 MicroPython 实现一个 MQTT 客户端,包括环境搭建、连接服务器、订阅和发布消息。
首先,确保在树莓派上安装 MicroPython,可通过 apt-get 更新和安装 micropython。接着,安装 umqtt.simple 库以支持 MQTT。我们将使用 EMQ 免费公共 MQTT 服务器作为示例,获取其连接信息。网站源码 盗版追踪
编写简单的代码文件,如 sub.py 用于订阅主题,pub.py 用于发布消息。使用 MQTT 5.0 客户端 MQTT X 进行测试,通过树莓派终端运行 MicroPython 代码,验证消息的接收和发送功能。
总结,MicroPython 和 MQTT 的结合为树莓派这类微型设备开发物联网应用提供了便利。MQTT 的实时性和效率与树莓派的便携性相得益彰,帮助我们在资源有限的环境中实现高效通信。记得在使用时注明 EMQ 的版权声明,获取原文更多详情,请访问 emqx.com/zh/blog/micro-...
如何搭建自己的MQTT服务器
搭建个人MQTT服务器,首选轻量级开源项目mosquitto。首先,在Linux系统上安装,可选择使用虚拟机或真机环境。使用命令行安装所需的依赖库:
sudo apt-get install libssl-dev
sudo apt-get install uuid-dev
sudo apt-get install cmake
其次,下载并解压mosquitto最新版本1.5.1。操作步骤如下:
tar xzvf mosquitto-1.5.1.tar.gz
进入解压后的目录,编译并安装:
cd mosquitto-1.5.1/
make
make install
启动mosquitto服务,命令如下:
./mosquitto -v
系统会自动以默认参数启动MQTT服务器,监听端口为。如需自定义配置文件启动服务,使用参数 -c,命令如下:
./mosquitto -c mosquitto.conf
至此,MQTT服务器搭建完成。使用MQTT客户端进行测试,发布主题“home/garden/fountain/2”,内容为“hello world”。客户端连接服务器后,会记录相关日志信息,包含新连接建立、客户端连接成功、未指定will消息、发送CONNACK、PINGREQ与PONG等交互过程。客户端订阅同一主题后,html爱心树源码可接收到发布消息。使用Wireshark抓包工具,验证MQTT报文传递过程,直观展示消息发布与订阅的完整流程。
windows下paho.mqtt安装教程(C/C++)
(1)Github仓库地址:
C库:
C++库:
(2)Visual Studio (社区版即可)
(3)CMake
选择最新版本的Installer即可:
安装过程比较简单,一路next,注意把CMake加到系统路径里即可:
2、编译C库
这里的主要步骤均来自于仓库的readme。
首先clone源码到本地文件夹,例如MQTT\paho.mqtt.c ,它包含几个文件夹:
然后打开CMake客户端,需要依次完成以下步骤:
(1)选择源代码路径,也就是source code:
这个路径就是上面clone的路径。
(2)选择输出路径,CMake会将生成的vs工程保存在这个路径下,这里为了方便,可以直接在源码路径下新建一个文件夹,例如build:
(3)配置configure,点开后如下:
第一个是选择VS的版本,一般选择比较高的即可,这里是。然后选择输出平台,可根据情况选择x或win。这里没有特殊参数,就可以忽略Optional toolset...,然后选择下面的工具链为跨平台:
整体的选择如下:
然后点击Next,选择cmke文件夹下的toolchain:
这里根据前面选择的输出平台选择win或者,然后点击完成。
CMake界面如下,显示配置完成:
然后可以看到一大片红色区域,它是CMake的编译选项,这里主要关注一下PAHO即可,点击展开后,有如下选项:
这些选项都很好理解,可以看仓库的介绍,这里截取一部分如下:
这里注意,选择的PAHO_BUILD_SHARED或者 PAHO_BUILD_STATIC最好是和后面编译C++版本的选项要一致。我这里选择SHARED。黄金长阴源码
这里要注意一点,记住这个路径,后面编译C++库会用到:
(4)点击生成(Generate),产生VS工程目录,位置在第(2)步选择的那个路径。
然后就可以通过VS编译了,完成后,可以看到
这些是编译C++库需要的一些文件。
最后一步:安装生成的这些库文件,方便后续编译C++库文件。
首先在源码路径打开命令行窗口或者powershell,输入如下命令,并执行:
这一步的意义是把编译出的文件安装到指定的目录,这个目录就是第(3)步末尾提示的那个CMAKE_INSTALL_PREFIX路径,后面编译C++库文件时会用到,当然也可以在CMake中指定别的目录,如果默认的这个目录需要管理员权限才能创建,可以选择一个普通的目录(当然也可以管理员权限运行这条命令)。
这个目录下的文件如图:
后面会用到\lib\cmake\eclipse-paho-mqtt-c路径下的几个文件。
3、编译C++库
同样先把源码clone下来,然后打开CMake,按照上面编译C库的方式设置那些选项,但不需要设置工具链,直接默认即可。
点击完成后会报错:
原因是没找到eclipse-paho-mqtt-c,它就是刚刚要设置的C库安装目录,找到设置这个路径的CMake的选项如下,填上C库的安装目录:
然后重新配置,就成功了。
下一步点击生成,会报新的错误:
原因是CMakeList里行报错:
这里是要编译静态库版本,这与C库生成的不符合,直接把这个if编译选项去掉即可。
再次尝试又会报错:
原因是CMakeList选择的是security版本,这里在git仓库也有描述:
所以,我们看C库的安装目录下是哪个,就把CMakeList里替换掉:
将eclipse-paho-mqtt-c::paho-mqtt3as替换为eclipse-paho-mqtt-c::paho-mqtt3a 就大功告成,点击生成,就全部完成了,打开生成的VS工程,编译。
整个过程要注意的是:C库的编译选项和C++库的编译选项最好保持一致。
编写基于paho-mqtt-c客户端用openssl证书连接mqtt broker
编写基于paho-mqtt-c客户端使用openssl证书连接mqtt broker,涉及broker、消息、超时、持久化等概念。以下代码示例说明其过程。
初始化OpenSSL库并创建SSL上下文是第一步。紧接着,设置MQTTClient_SSLOptions结构体的选项,包括启用服务器证书认证、使用TLSv1.2协议以及指定信任的CA证书文件路径。
将SSL上下文融入MQTTClient_SSLOptions,并将此设置传递给MQTTClient_connectOptions结构体。最后一步,执行连接MQTT broker操作并发送消息。
重要提示:此示例代码仅为参考,实际应用中需根据具体情况进行调整。具体配置OpenSSL证书及其文件路径等,需依据实际情况。
Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
前话
项目需求驱使我们转向 MQTT 协议的实现,由于 QtMqtt 库不支持队列模式(点对点),而只能使用订阅/发布者模式,我们决定采用 C++ ActiveMQ 进行开发。
MQTT 协议
MQTT,即消息队列遥测传输协议,是一种基于发布/订阅模式的轻量级通讯协议,IBM 在 年发布。其优点在于,以极低的代码量和带宽消耗提供即时可靠的消息服务,广泛应用于物联网、小型设备和移动应用。
设计原则与特点
MQTT 的核心特点是发布/订阅消息模式,实现一对多的消息发布,减少应用程序间的耦合。它对负载内容进行屏蔽的高效传输,基于 TCP/IP 提供网络连接,支持三种消息发布服务质量。它的小型传输、低开销和客户端异常中断机制,使其非常适合物联网领域,尤其适用于传感器与服务器间的通信,以及信息收集。
发布/订阅者模式
MQTT 是基于客户端-服务器的消息发布/订阅传输协议,适用于受限环境,如机器与机器通信、物联网应用,特别适合传感器和服务器通信,以及小型设备的运算能力和带宽相对不足的情况。
MQTT 服务器
MQTT 协议中的服务器角色称为“消息代理”,可以是应用程序或设备,位于消息发布者和订阅者之间,负责数据推送。
MQTT 协议中的方法
MQTT 定义了一系列方法(动作),用于操作服务器上的资源,包括数据处理和生成。主要方法包括读取、写入、订阅和发布等。
CMS 客户端
CMS API 是一种类似 JMS 的 C++ API,用于与消息代理进行交互,如 Apache ActiveMQ,它使客户端代码更加整洁、易于维护。
下载与编译 ActiveMQ-CPP
下载 ActiveMQ-CPP 的最新 Windows 版本源码,推荐访问官网或 CSDN 下载页面。使用 VS 编译 ActiveMQ-CPP。
编译步骤
1. 解压下载的压缩文件至专用文件夹。
2. 使用 VS 打开编译工程文件。
3. 编译“avtivemq-cpp”时遇到“/ZI”和“/Gy-”命令行选项不兼容的错误。
4. 通过手动更改“/Zi”和“/Gy”命令为兼容版本来解决。
5. 继续编译工程生成 debug 和 release 版本。
6. 编译通过,切换到 release 版本后,需要重新配置包含头文件属性并编译。
编译 APR-1.7.0 库
ActiveMQ 依赖 APR 库,其相关信息在源码根目录的 README.txt 中提供。首先下载 APR 库,解压至专用编译文件夹,使用 CMake 配置工程,生成 VS 工程文件。然后,使用 CMake 生成 APR 库,通过 VS 打开并编译工程,最终完成头文件和库文件的归类整理。
Paho MQTT C—MQTTAsync 库接口
MQTTAsync 是一个用于 C/C++ 的 MQTT 客户端库,实现 MQTT 协议的异步通信,基于 Eclipse Paho。它提供非阻塞方式与 MQTT 代理通信。
使用 MQTTAsync 构建 MQTT 客户端应用程序并连接 MQTT 代理(MQTT 服务器)简易。支持发布和订阅消息,实现应用程序间可靠消息传递。
创建 MQTT 客户端使用 MQTTAsync_create() 函数,需传入五个参数,初始化 MQTTAsync 对象。
示例代码创建 MQTTAsync 客户端,使用默认持久化方式,确保在断开后消息保存恢复,支持持久性与非持久性选择。
创建基于指定选项的 MQTT 客户端利用 MQTTAsync_createWithOptions() 函数,参数与 MQTTAsync_create() 相似,MQTTAsync_createOptions 结构体定义了异步客户端选项。
MQTTAsync_connect() 函数建立客户端与 MQTT 代理连接,需传入客户端对象和连接选项。
MQTTAsync_connectOptions 结构体包含多个字段,如服务器地址、端口、用户名、密码等,用于指定连接细节。
MQTTAsync_connect() 函数返回 MQTTAsync_token,用于跟踪连接状态,处理回调函数。
调用前建议使用 MQTTAsync_setCallbacks() 设置回调,启用异步消息和状态通知。
示例代码演示连接操作,建立客户端与 MQTT 服务器间的连接。
待更新:后续 MQTTAsync 库 API 更新。
MQTT和Websocket的区别是什么?
在物联网时代,海量设备的接入和管理提出了对网络、协议和平台架构的新挑战。针对物联网设备通信的特殊需求,如网络环境的复杂性和不可靠性、资源限制等,MQTT协议应运而生。MQTT基于发布/订阅模式,设计原则包括简单性、QoS支持、轻量和高效带宽利用。其核心特性包括灵活的主题系统、带宽最小化、三种QoS等级、会话保持和在线状态感知等。
MQTT协议以C、Erlang和Node.JS等语言实现的开源服务器如Eclipse Mosquitto、EMQX和Mosca等为主流选项。它在轻量可靠、生态完善(支持广泛平台和云服务)以及物联网应用特性(如QoS管理)方面有显著优势。与TCP的KeepAlive机制不同,MQTT有自己的心跳机制,保持连接稳定性。
而WebSocket则更为简单,基于HTTP的Upgrade机制,提供双向通信,报文结构更为直观。WebSocket在Web开发中更为常见,适用于浏览器环境,而MQTT更适用于物联网设备通信,尤其是当需要复杂的消息投递控制时。虽然两者底层都依赖TCP,但报文结构、会话协商和消息确认机制存在显著差异。
在选择MQTT还是WebSocket时,需考虑具体应用场景,如实时性要求、设备资源限制和是否需要复杂的QoS控制。MQTT因其适用于物联网而广受欢迎,而WebSocket则提供了更直观的Web应用接入方式。
GO语言 处理服务端MQTT请求性能
在目前的项目中,我们采用的是PHP的MQTT扩展。然而,由于它是单线程程序,在并发高的时候容易出现数据丢失和崩溃的问题。
尝试过使用SWOOLE来处理,但由于MQTT扩展的影响,SWOOLE的并发能力没有得到有效发挥。
最终,我选择了我的“情人”——Go语言。此前我曾用它来编写爬虫,无论是稳定性还是性能都无可挑剔。
我的服务器环境是腾讯云的1核1G1M配置。
实现后进行测试,结果显示,在个请求和个并发的情况下,每次请求都需要连接数据库并写入数据,因此花费了秒才处理完毕。如果只是写入LOG,我认为2秒就能完成。因此,性能是非常优秀的。
以下为代理和发布者的代码示例:
$c = new \Mosquitto\Client();
$c->setCredentials('XXX','XXX');
$c->connect('..XXX.XXX',, );
$c->loop();
$topic = 'lizonggezigui/accept';
//发送个数据
for($i=1; $i<= ; $i++) {
$res = $c->publish($topic, $i, 0);
if($res) {
echo "send $i ok\r ";
} else {
echo "send $i error\r ";
}
$c->loop();
}
$c->loop();
$c->disconnect();
echo "end";
以下为订阅者(Go语言)的代码示例:
服务端:
$content = $_GET['content'];
if(empty($content)) {
exit();
}
$mysqli = new mysqli("..XXX.XXX", "XXX", "XXX", 'test');
if(!$mysqli) {
echo"database error";
}else{
$sql = "insert into t(content) values('$content')";
$result = $mysqli->query($sql);
}
$mysqli->close();
2024-12-23 07:342511人浏览
2024-12-23 07:191146人浏览
2024-12-23 06:541716人浏览
2024-12-23 06:532046人浏览
2024-12-23 06:032232人浏览
2024-12-23 05:372473人浏览
據共同社7日報道,日本厚生勞動省當日公布的每月勞工統計初步數據顯示,1月日本實際工資同比下降0.6%,連續22個月減少。責任編輯: 宋得書
你的臉部或身上有痣嗎?你知道痣不只影響美觀,還可能對身體造成影響嗎?黑色素細胞痣大部分都是後天產生安南醫院整形外科主任王冠智說明,大眾所熟知的「痣」是學名為「黑色素細胞痣」的黑痣。顧名思義,痣是黑色素
2018年,美國在川普掌舵下,即便內政翻天覆地,經濟依舊開出一朵燦爛的花。可惜,成長動能出現減弱跡象,再碰上國會分裂、民心分化局面,開始讓白宮頂上有烏雲聚來。