Как подписаться на комаров на проекте 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 никогда не будет обрабатывать сообщения

Другие вопросы по тегам