phpmqtt(phpmqtt 收到feof重启占满cpu)
简介:
phpmqtt是一个运行在PHP环境中的MQTT客户端库。它的运行需要PHP5.3及以上版本。
多级标题:
一、安装phpmqtt
二、基本的MQTT消息发布/订阅
1. 消息发布
2. 消息订阅
三、高级特性
1. 消息遗嘱
2. 认证
3. SSL/TLS加密通信
内容详细说明:
一、安装phpmqtt
phpmqtt的安装非常简单,只需使用Composer进行安装即可。在终端中执行以下命令即可:
```
composer require bluerhinos/phpmqtt dev-master
```
二、基本的MQTT消息发布/订阅
1. 消息发布
通过phpmqtt发布一条消息非常简单。以下是一段发布一条消息的示例代码:
```
require("vendor/autoload.php");
use Bluerhinos\phpMQTT;
$mqtt = new phpMQTT("test.mosquitto.org", 1883, "phpMQTT Pub Example");
if ($mqtt->connect()) {
$mqtt->publish("test/topic", "Hello World!", 0);
$mqtt->close();
```
在上述代码中,我们使用了Bluerhinos\phpMQTT类来操作MQTT连接。首先,我们创建了一个名为“phpMQTT Pub Example”的客户端实例,并尝试连接至MQTT服务器。通过调用$mqtt->publish()方法,我们可以发布一条消息,该方法的第一个参数表示消息主题,第二个参数表示消息内容,第三个参数为消息QoS。
2. 消息订阅
通过phpmqtt订阅一条消息也非常简单。以下是一段订阅一条消息的示例代码:
```
require("vendor/autoload.php");
use Bluerhinos\phpMQTT;
$mqtt = new phpMQTT("test.mosquitto.org", 1883, "phpMQTT Sub Example");
if ($mqtt->connect()) {
$mqtt->subscribe("test/topic", 0);
while ($mqtt->loop()) {
$msgs = $mqtt->proc();
foreach ($msgs as $message) {
echo "Msg Recieved: ". $message['topic'] .": ". $message['payload'] ."
";
}
}
$mqtt->close();
```
在上述代码中,我们创建了一个名为“phpMQTT Sub Example”的客户端实例,并尝试连接至MQTT服务器。通过调用$mqtt->subscribe()方法,我们可以订阅一条消息。在订阅成功后,我们通过$mqtt->loop()方法来保持MQTT连接,并且循环接收MQTT消息。
三、高级特性
1. 消息遗嘱
通过设置消息的“遗嘱”标志位,可以在客户端意外断开连接时,让MQTT服务器自动发布一条遗嘱消息。以下是一段代码,用以设置一条消息的遗嘱标志位:
```
require("vendor/autoload.php");
use Bluerhinos\phpMQTT;
$mqtt = new phpMQTT("test.mosquitto.org", 1883, "phpMQTT Pub Example");
$mqtt->setWill("test/topic", "Goodbye!", 0);
if ($mqtt->connect()) {
$mqtt->publish("test/topic", "Hello World!", 0);
$mqtt->close();
```
通过调用$mqtt->setWill()方法,我们可以为消息设置遗嘱标志位。在以上代码中,我们为消息“test/topic”设置遗嘱消息“Goodbye!”。
2. 认证
phpmqtt允许通过用户名和密码来进行MQTT连接认证。以下是一段带有用户名和密码认证的MQTT客户端连接代码示例:
```
require("vendor/autoload.php");
use Bluerhinos\phpMQTT;
$mqtt = new phpMQTT("test.mosquitto.org", 1883, "phpMQTT Auth Example");
$username = "my_username";
$password = "my_password";
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish("test/topic", "Hello World!", 0);
$mqtt->close();
```
通过调用$mqtt->connect()方法的第一个参数传入true,我们可以打开MQTT连接的用户名和密码认证特性。通过第三、第四个参数分别传入MQTT连接的用户名和密码,我们可以成功进行MQTT连接。
3. SSL/TLS加密通信
phpmqtt还支持通过SSL/TLS加密通信来对MQTT连接进行加密保护。以下是一段带有SSL/TLS加密的MQTT客户端连接代码示例:
```
require("vendor/autoload.php");
use Bluerhinos\phpMQTT;
$mqtt = new phpMQTT("test.mosquitto.org", 8883, "phpMQTT TLS Example", "server.crt");
$username = "my_username";
$password = "my_password";
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish("test/topic", "Hello World!", 0);
$mqtt->close();
```
在以上代码中,我们为MQTT连接设置了SSL/TLS加密保护。通过调用$mqtt->connect()方法的第一个参数传入true,我们可以打开MQTT连接的SSL/TLS加密保护特性。通过第三、第四个参数分别传入MQTT连接的用户名和密码,我们可以成功进行MQTT连接。在初始化phpmqtt客户端实例时,我们还将证书“server.crt”传入其中。