mosquito php,宝塔面板下怎么安装Mosquitto-php扩展

本文介绍了如何在CentOS7上通过PECL安装Mosquitto的PHP扩展,以实现MQTT消息的发送。首先确保安装了php-devel和mosquitto-devel,接着使用PHP7.1的PECL安装Mosquitto-PHP,然后在php.ini中添加扩展并重启服务。最后,展示了使用PHP发送MQTT消息的示例代码,并给出了接收消息的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MQTT 是物联网的消息传送协议标准。

在 CentOS 7上常用的开源 MQTT 消息服务器就是 Mosquitto。

我们用 PECL 来安装 Mosquitto 的 PHP 实现。

首先要确保 php-devel 已经安装:# yum install -y php-devel

然后确保 mosquitto-devel 也已经安装:

yum install -y mosquitto-devel

由于宝塔是多环境共存,以下以PHP7.1为例

再用 pecl 来安装 Mosquitto-PHP

# /www/server/php/71/bin/pecl install Mosquitto-alpha

然后去 /www/server/php/71/etc/php.ini 添加一行:

extension=mosquitto.so

重启 服务后,运行 php -i|grep mosquitto 可以看到

mosquitto

libmosquitto version => 1.4.13

表明 PHP 可以使用 mosquitto 的 MQTT 库了。

下面是用 PHP 来发送消息的示例代码 mosquitto-test.php:<?php

2

3

4 $c = new Mosquitto\\Client;

5

6 $topic = 'test';

7 $msg = 'hello你好';

8 $qos = 2;

9

10 $username = 'username';

11 $password = 'Passw0rd';

12

13 $c->setCredentials($username, $password);

14 $c->onConnect(function() use ($c) {

15 global $topic,$msg,$qos;

16 $c->publish($topic, $msg, $qos);

17 });

18

19 $host = '192.168.7.201';

20

21 $c->connect($host);

22 for ($i = 0; $i < 100; $i++) {

23 // Loop around to permit the library to do its work

24 $c->loop(1);

25 }

26

27 echo "结束\\n";

然后运行 php mosqitto-test.php

另外开启一个终端,用# mosquitto_sub -h 192.168.7.201 -u username -P Passw0rd -t test

可以看到 PHP 程序发送的消息: "hello你好".

<think>我们正在树莓派5上安装Mosquitto MQTT Broker和mosquitto-clients,然后使用Python编写MQTT Broker和Client的示例代码。 注意:实际上,Mosquitto本身就是一个MQTT Broker(服务器),所以我们不需要用Python再实现一个Broker。通常,我们使用Mosquitto作为Broker,然后用Python编写客户端(Publisher和Subscriber)。 因此,我们将做以下步骤: 1. 在树莓派5上安装Mosquitto MQTT Broker和mosquitto-clients。 2. 安装Python的MQTT客户端库,比如paho-mqtt。 3. 编写一个Python MQTT订阅者(Subscriber)示例。 4. 编写一个Python MQTT发布者(Publisher)示例。 但是,用户要求“使用Python建立MQTT Broker和Client的範例程式”,请注意:通常我们不会用Python实现Broker,因为Mosquitto已经是Broker了。所以,我们理解为: - Broker:使用安装好的Mosquitto(用C写的,性能好) - Client:用Python编写两个客户端,一个发布消息,一个订阅消息。 如果用户确实需要纯Python的Broker,我们可以使用其他库(如hbmqtt,但已经不再维护;或者asyncio-mqtt,但它是一个客户端库)。目前比较活跃的纯Python MQTT Broker实现可以选择`mosquito`(注意拼写不同)或者`gmqtt`,但后者主要是客户端。另一个选择是`aiohttp`配合MQTT协议实现,但这比较复杂。 考虑到用户的需求,我们假设用户希望: 1. 安装Mosquitto Broker(用C写的)作为服务器。 2. 用Python编写客户端示例。 如果用户坚持要用Python写Broker,我们可以使用`paho-mqtt`库中的示例Broker(但注意,paho-mqtt主要是一个客户端库,它提供了一个简单的Broker示例,但仅用于测试,不适用于生产环境)。我们可以提供一个简单的基于paho-mqtt的Broker示例,但请注意其局限性。 因此,我们提供两种方案: 方案一(推荐): - 安装Mosquitto(C语言)作为Broker,然后使用Python编写客户端。 方案二(如果非要用Python写Broker): - 使用paho-mqtt提供的简单Broker(forwarder.py),或者使用其他纯Python的Broker实现(如hbmqtt,但不再维护,或寻找其他)。 由于用户之前的问题是关于在树莓派上安装Mosquitto,所以按照常理,我们使用方案一。 步骤: 第一部分:安装Mosquitto Broker和mosquitto-clients 根据引用[2]和[5],我们可以通过以下步骤安装: 注意:树莓派5可能运行的是Raspberry Pi OS(基于Debian),我们假设是最新版本(bookworm)。 引用[5]提到,Mosquitto的官方仓库提供了不同版本的列表,但树莓派5可能使用的是bookworm,所以我们需要添加适合bookworm的仓库。 但是,在官方仓库中,可能还没有bookworm的版本,我们可以尝试使用buster或bullseye的仓库,或者使用系统自带的版本。 根据引用[2]的安装步骤: 1. 添加Mosquitto仓库: ``` sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key ``` 2. 然后下载对应版本的仓库列表文件,例如对于bookworm(Debian12),我们可以尝试使用bullseye的(因为bookworm可能还没有),或者查看是否有bookworm的版本。如果没有,我们可以使用bullseye的,通常可以兼容。 但是,我们也可以直接使用系统自带的Mosquitto。在Raspberry Pi OS中,默认仓库可能已经包含Mosquitto。 因此,我们可以先尝试用系统仓库安装: ``` sudo apt update sudo apt install -y mosquitto mosquitto-clients ``` 如果系统仓库中没有,我们再添加官方仓库。 根据引用[5]中的方法,我们可以创建仓库列表文件: 对于bookworm,我们可以尝试使用bullseye的仓库(因为目前可能还没有bookworm的仓库文件),或者直接使用以下命令添加仓库: ``` sudo wget -O /etc/apt/sources.list.d/mosquitto-bookworm.list http://repo.mosquitto.org/debian/mosquitto-bookworm.list ``` 但是,如果官方没有提供bookworm的列表文件,我们可以尝试用bullseye的代替,或者直接编辑文件将发行版名称改为bookworm。 但根据官方仓库(http://repo.mosquitto.org/debian/),目前有bullseye和bookworm的目录。所以我们可以创建bookworm的列表文件: ``` sudo wget -O /etc/apt/sources.list.d/mosquitto-bookworm.list http://repo.mosquitto.org/debian/mosquitto-bookworm.list ``` 然后更新并安装: ``` sudo apt update sudo apt install -y mosquitto mosquitto-clients ``` 安装完成后,启动服务并设置开机启动: ``` sudo systemctl enable mosquitto sudo systemctl start mosquitto ``` 检查状态: ``` sudo systemctl status mosquitto ``` 第二部分:安装Python的MQTT客户端库 我们将使用paho-mqtt,这是一个常用的Python MQTT客户端库。 安装: ``` pip install paho-mqtt ``` 或者使用系统包管理器(如果有): ``` sudo apt install python3-paho-mqtt ``` 第三部分:编写示例代码 我们将编写两个Python脚本:一个订阅者(subscriber.py)和一个发布者(publisher.py)。 订阅者(subscriber.py): ```python import paho.mqtt.client as mqtt # 当连接成功时的回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 订阅主题 client.subscribe("test/topic") # 当收到消息时的回调函数 def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) # 创建客户端 client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message # 连接MQTT服务器(这里使用本地服务器,所以是localhost) client.connect("localhost", 1883, 60) # 循环处理网络流量,分发回调等 client.loop_forever() ``` 发布者(publisher.py): ```python import paho.mqtt.client as mqtt import time # 创建客户端 client = mqtt.Client() # 连接MQTT服务器 client.connect("localhost", 1883, 60) # 循环发布消息 for i in range(10): # 发布消息到主题 "test/topic" client.publish("test/topic", "Hello MQTT " + str(i)) print("Message published: Hello MQTT " + str(i)) time.sleep(1) # 断开连接 client.disconnect() ``` 运行: 1. 在一个终端运行订阅者:`python3 subscriber.py` 2. 在另一个终端运行发布者:`python3 publisher.py` 这样,订阅者就会收到发布者发送的10条消息。 注意:如果需要在不同设备上运行,需要将"localhost"替换为树莓派的IP地址,并且确保树莓派的1883端口对客户端设备开放。 关于安全性:默认安装Mosquitto没有启用身份验证,如果需要,可以设置用户名密码。这里为了示例简单,没有设置。 如果用户确实需要纯Python的Broker,我们可以使用paho-mqtt库中提供的一个简单Broker(forwarder.py),但请注意它不是一个完整的Broker,仅用于测试。我们可以从paho-mqtt的示例中获取:https://github.com/eclipse/paho.mqtt.python/blob/master/examples/forwarder.py 但是,我们建议使用Mosquitto作为Broker,因为它更稳定和完整。 因此,我们按照方案一提供示例。 注意:在树莓派5上,安装过程应该与之前的树莓派版本类似。 如果安装过程中遇到问题,请参考引用[2][4][5]中的安装步骤。 最后,生成相关问题。</think>### 在 Raspberry Pi 5 上安装 Mosquitto 及 Python MQTT 示例 #### 步骤 1:安装 Mosquitto MQTT Broker ```bash # 添加 Mosquitto 官方仓库 sudo wget -O /etc/apt/sources.list.d/mosquitto-bookworm.list http://repo.mosquitto.org/debian/mosquitto-bookworm.list sudo wget -O /etc/apt/trusted.gpg.d/mosquitto-repo.gpg http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key # 安装服务端和客户端 sudo apt update sudo apt install -y mosquitto mosquitto-clients python3-paho-mqtt # 启用服务 sudo systemctl enable mosquitto sudo systemctl start mosquitto ``` > 验证安装:`mosquitto -v` 应显示版本信息(如 2.0.15)[^2][^3] #### 步骤 2:Python MQTT 示例代码 ##### 订阅者 (subscriber.py) ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code: " + str(rc)) client.subscribe("raspberry/topic") def on_message(client, userdata, msg): print(f"Received: [{msg.topic}] {msg.payload.decode()}") client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("localhost", 1883, 60) # 连接本地 Broker client.loop_forever() ``` ##### 发布者 (publisher.py) ```python import paho.mqtt.client as mqtt import time client = mqtt.Client() client.connect("localhost", 1883, 60) # 连接本地 Broker for i in range(5): message = f"Hello MQTT! Message {i+1}" client.publish("raspberry/topic", message) print(f"Published: {message}") time.sleep(1) client.disconnect() ``` #### 操作流程 1. 启动订阅者(后台运行): ```bash python3 subscriber.py & ``` 2. 运行发布者: ```bash python3 publisher.py ``` 3. 观察输出: - 发布者输出:`Published: Hello MQTT! Message X` - 订阅者输出:`Received: [raspberry/topic] Hello MQTT! Message X` #### 测试工具验证 ```bash # 终端1:订阅测试 mosquitto_sub -t "raspberry/topic" # 终端2:发布测试 mosquitto_pub -t "raspberry/topic" -m "Manual test" ``` #### 安全配置(可选) 在 `/etc/mosquitto/mosquitto.conf` 中添加: ```ini allow_anonymous false password_file /etc/mosquitto/passwd ``` 创建密码文件: ```bash sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username ``` --- ### 关键说明 1. **Broker 选择**:Mosquitto 是 C 语言实现的高效 MQTT Broker[^3],Python 客户端通过 `paho-mqtt` 库连接 2. **默认配置**: - 地址:`localhost` 或树莓派 IP - 端口:`1883` (未加密), `8883` (SSL) 3. **跨设备通信**:将 `localhost` 替换为树莓派 IP 即可从其他设备访问 > 完整文档参考:[Mosquitto 官方配置指南](https://mosquitto.org/documentation/)[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值