Как подписаться на комаров на проекте yii2
У меня есть yii2
проект с расширенным шаблоном, и я хочу реализовать уведомления, используя mosquitto broker
, Я уже выполнил работу над публикацией, и теперь мне нужна помощь в подписке на тему в моем приложении для внешнего интерфейса. Я уже пробовал, но страница перестает работать, когда я подписываюсь на любую тему. Есть ли простой способ или учебник, который я могу использовать? Если вам нужна дополнительная информация, пожалуйста, спросите.
PS: Моя идея заключалась в следующем: когда я открываю любую страницу в веб-интерфейсе, я проверяю сообщения, сохраняю их в массиве, устанавливаю их как параметры просмотра, а затем отображаю свою страницу.
РЕДАКТИРОВАТЬ: Пока я пробовал следующее
Учебный класс
<?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;
}
1 ответ
Эта модель вряд ли будет работать, потому что обычно сообщения доставляются MQTT только в момент их публикации.
Поэтому, если вы не используете сохраненные сообщения или постоянные подписки для данного идентификатора клиента, чтобы ставить сообщения в очередь. Это означает, что ваш цикл while никогда не будет обрабатывать сообщения