【问题标题】:How to subscribe to mosquitto on a yii2 project如何在 yii2 项目上订阅 mosquitto
【发布时间】:2018-01-21 16:04:49
【问题描述】:

我有一个带有高级模板的yii2 项目,我想使用mosquitto broker 实现通知。 我已经完成了发布部分并开始工作,现在我希望在订阅我的前端应用上的主题方面获得一些帮助。我已经尝试过了,但是当我订阅任何主题时,页面似乎停止工作。 有什么简单的方法或教程可以使用吗?如果需要更多信息,请询问。

P.S:我的想法是:当我在前端打开任何页面时,我会检查消息,将它们保存在一个数组中,将它们设置为视图参数,然后渲染我的页面。

编辑:到目前为止我已经尝试了以下

<?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; 
    }

【问题讨论】:

  • 寻求教程对于 Stack Overflow 来说是无关紧要的。编辑问题以显示您已经尝试过的内容,有人可能会帮助您解决问题。
  • 已编辑!谢谢你的提示。我要求提供教程,因为在这种情况下,我不相信我可以用我的代码做很多事情,但我可能错了

标签: yii2 mqtt publish-subscribe yii2-advanced-app phpmqtt


【解决方案1】:

此模型不太可能起作用,因为通常消息仅在发布时由 MQTT 传递。

因此,除非您使用保留消息或给定客户端 ID 的持久订阅来排队消息。这意味着您的 while 循环将永远不会有任何消息要处理

【讨论】:

  • 这就是我所害怕的。有人告诉我使用 mqtt 制作通知系统,但我会尝试更改为基于 BD 记录的通知系统。感谢您的回复
  • 您可以让页面使用 MQTT over Websockets 订阅正确的 MQTT 主题。这将具有实时性的好处,并且不需要等到页面加载来获取消息
  • 我不确定我能否在我目前的条件下应用它(使用 wamp 和我的笔记本电脑的学校项目)。此外,我使用 bd 中的表格(因为我已经习惯了)对这个系统进行编码比现在花时间学习它更容易。也许在另一个项目中。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多