一、ubuntu安装emqx
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
sudo apt-get install emqx
sudo systemctl start emqx二、端口
端口号 介绍
1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8080 HTTP API 端口
18083 Dashboard 管理控制台端口,可以访问http://192.168.110.xxx:18083,默认密码为admin/public重置密码:emqx ctl admins passwd admin public123
三、php使用mqtt
1. 安装composer
composer require bluerhinos/phpmqtt -vvv2. 发布消息
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Bluerhinos\phpMQTT;
use Illuminate\Routing\Controller as BaseController;
class TestController extends BaseController
{
public function sendMqtt(Request $request){
//发布主题
$subject=$request->input('subject');
//发布内容,字符串,如果是对象要转成json
$content=$request->input('content');
//客户端id,自己生成唯一的
$client_id='mqtt_'.$this->getRandStr(10);
$mqtt = new phpMQTT(env('MQTT_SERVER_IP'), env('MQTT_SERVER_PORT'), $client_id);
//连接后发布消息
if ($mqtt->connect(true, NULL, env('MQTT_SERVER_USER_NAME'), env('MQTT_SERVER_PASSWORD'))) {
$mqtt->publish($subject, $content, 0, false);
$mqtt->close();
} else {
echo "Time out!\n";
}
}
/**
* @param $length
* @return string
* 获取随机字符串
*/
public function getRandStr($length){
//字符组合
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str)-1;
$randstr = '';
for ($i=0;$i<$length;$i++) {
$num=mt_rand(0,$len);
$randstr .= $str[$num];
}
return $randstr;
}
}
3. 订阅消息
需要长连接,所以使用console模式运行php
public function handle()
{
$server = env('MQTT_SERVER_IP');
$port = env('MQTT_SERVER_PORT');
$username = env('MQTT_SERVER_USER_NAME');
$password = env('MQTT_SERVER_PASSWORD');
$client_id = 'mqttjs_asdfadsfaqerqw';
//订阅主题,跟发布的主题要保持一致。
//消费端主题支持通配符,例如subject/#,可以收到subject/123 subject/124
$subject = 'bimcc/#';
$mqtt = new phpMQTT($server, $port, $client_id);
if (!$mqtt->connect(true, NULL, $username, $password)) {
exit(1);
}
$mqtt->debug = true;
$topics[$subject] = array('qos' => 0, 'function' => function($topic, $msg){
echo 'Msg Recieved: ' . date('r') . "\n";
echo "Topic: {$topic}\n\n";
echo "\t $msg \n\n"; //此处是mqtt收到的消息
});
//监听链接,并回调处理
$mqtt->subscribe($topics, 0);
while ($mqtt->proc()) {}
$mqtt->close();
}作者:admin 创建时间:2026-06-04 07:12
最后编辑:admin 更新时间:2026-06-04 07:12
最后编辑:admin 更新时间:2026-06-04 07:12