如何在 yii2 项目上订阅 mosquitto
How to subscribe to mosquitto on a yii2 project
我有一个带有高级模板的 yii2
项目,我想使用 mosquitto broker
实现通知。
我已经完成并运行了发布部分,现在我想在订阅我的 前端应用程序 上的主题时获得一些帮助。我已经尝试过了,但是当我订阅任何主题时,页面似乎停止工作。
我可以使用任何简单的方法或教程吗?如果需要更多信息,请询问。
P.S:我的想法是:当我在前端打开任何页面时,我检查消息,将它们保存在一个数组中,将它们设置为视图参数,然后呈现我的页面。
编辑:到目前为止,我已经尝试了以下
Class
<?php
namespace common\models;
use Yii;
class Notificacoes
{
private $listaNotificacoes;
public function __construct($id, $name)
{
$this->listaNotificacoes = array();
$server = "127.0.0.1";
$port = 1883;
$username = "";
$password = "";
$client_id = $id;
$mqtt = new \common\mosquitto\phpMQTT($server, $port, $client_id);
if(!$mqtt->connect(true, NULL, $username, $password)) {
exit(1);
}
$topics[$name] = array("qos" => 0, "function" => "procmsg");
$mqtt->subscribe($topics, 0);
while($mqtt->proc()){
}
$mqtt->close();
}
function procmsg($topic, $msg)
{
\array_push($this->listaNotificacoes, $msg);
}
public function getAll()
{
return $this->listaNotificacoes;
}
}
SiteController:我试图在 beforeAction 方法上获取消息
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
$notifications = array();
if (!Yii::$app->user->isGuest)
{
$notifs = new Notificacoes(Yii::$app->user->identity->getId(), Yii::$app->user->identity->username);
$notifications = $notifs->getAll();
}
$this->view->params['notifications'] = $notifications;
return true;
}
此模型不太可能起作用,因为通常消息仅在消息发布时由 MQTT 传送。
因此,除非您使用给定客户端 ID 的保留消息或持久订阅来对消息进行排队。这意味着您的 while 循环永远不会有任何消息要处理
我有一个带有高级模板的 yii2
项目,我想使用 mosquitto broker
实现通知。
我已经完成并运行了发布部分,现在我想在订阅我的 前端应用程序 上的主题时获得一些帮助。我已经尝试过了,但是当我订阅任何主题时,页面似乎停止工作。
我可以使用任何简单的方法或教程吗?如果需要更多信息,请询问。
P.S:我的想法是:当我在前端打开任何页面时,我检查消息,将它们保存在一个数组中,将它们设置为视图参数,然后呈现我的页面。
编辑:到目前为止,我已经尝试了以下
Class
<?php
namespace common\models;
use Yii;
class Notificacoes
{
private $listaNotificacoes;
public function __construct($id, $name)
{
$this->listaNotificacoes = array();
$server = "127.0.0.1";
$port = 1883;
$username = "";
$password = "";
$client_id = $id;
$mqtt = new \common\mosquitto\phpMQTT($server, $port, $client_id);
if(!$mqtt->connect(true, NULL, $username, $password)) {
exit(1);
}
$topics[$name] = array("qos" => 0, "function" => "procmsg");
$mqtt->subscribe($topics, 0);
while($mqtt->proc()){
}
$mqtt->close();
}
function procmsg($topic, $msg)
{
\array_push($this->listaNotificacoes, $msg);
}
public function getAll()
{
return $this->listaNotificacoes;
}
}
SiteController:我试图在 beforeAction 方法上获取消息
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
$notifications = array();
if (!Yii::$app->user->isGuest)
{
$notifs = new Notificacoes(Yii::$app->user->identity->getId(), Yii::$app->user->identity->username);
$notifications = $notifs->getAll();
}
$this->view->params['notifications'] = $notifications;
return true;
}
此模型不太可能起作用,因为通常消息仅在消息发布时由 MQTT 传送。
因此,除非您使用给定客户端 ID 的保留消息或持久订阅来对消息进行排队。这意味着您的 while 循环永远不会有任何消息要处理