immusen / yii2-swoole-mqtt
基于swoole 4的Yii2 MQTT服务器,将主题解析为路由,反映到控制器/操作/参数,并支持redis pub/sub从您的Web应用程序触发异步任务
Requires
- yiisoft/yii2: ~2.0.0
README
基于swoole 4的Yii2 MQTT服务器,将主题解析为路由,反映到控制器/操作/参数,并支持redis pub/sub从您的Web应用程序触发异步任务
安装
安装Yii2: Yii2.
安装swoole: swoole,推荐版本4+。
其他依赖项:php-redis扩展。
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist immusen/yii2-swoole-mqtt "~1.0"
或
"immusen/yii2-swoole-mqtt": "~1.0"
将其添加到您的 composer.json
文件的 require 部分中。
测试或使用
# after installation, cd project root path, e.g. cd yii2-advanced-project/
mv vendor/immusen/yii2-swoole-mqtt/example/mqtt ./
mv vendor/immusen/yii2-swoole-mqtt/example/mqtt-server ./
chmod a+x ./mqtt-server
# run:
./mqtt-server
# config :
cat ./mqtt/config/params.php
<?php
return [
'listen' => 8721,
'daemonize' => 0,
'auth' => 1, // config auth class in ./main.php
];
# or coding in ./mqtt/controllers/
测试客户端:MQTTLens,MQTT.fx
示例
案例A:订阅/发布
1,mqtt客户端订阅主题:room/count/100011
2.1,mqtt客户端发布:每次发布主题:room/join/100011,订阅方将获得count+1,或者发布主题:room/leave/100011获得count-1。
2.2,redis客户端发布:每次 $redis->publish('async', 'room/join/100011'),订阅方将获得count+1,或者 $redis->publish('async', 'room/leave/100011') 获得count-1。
案例B:发布(通知或报告)
mqtt客户端发布主题:report/coord/100111 和负载:例如 110.12345678,30.12345678,0,85
编码
MQTT订阅主题:"channel/count/100001" 将在
class ChannelController{
public function actionCount($channel_id){
echo "client {$this->fd} subscribed the count change of channel {$channel_id}";
}
}
//客户端1订阅了通道100001的计数变化
MQTT发布主题:"channel/join/100001" 带负载:"Foo" 将在
class ChannelController{
public function actionJoin($channel_id, $who){
echo "{$who} join in channel {$channel_id}";
#then broadcast update to all client who subscribed channel 100001
#$this->publish($fds, $sub_topic, $count);
}
}
// Foo加入通道100001
MQTT
关于MQTT: MQTT版本3.1.1加勘误01
本项目MQTT 3.1.1的非完整实现,正在升级...