zoukankan      html  css  js  c++  java
  • 关于laravel5 消息订阅/发布的理解初

    laravel5.4
    感觉官网文档说滴不够详细...安装predis官网很详细,这里略过....

    生成命令

    直接使用 Artisan 命令 make:command,该命令会在 app/Console/Commands 目录下创建一个新的命令类。如果该目录不存在,不用担心,它将会在你首次运行 Artisan 命令 make:command 时被创建。生成的命令将会包含默认的属性设置以及所有命令都共有的方法,

    这里我生成一个RedisSubscribe.php类,执行下面命令:

    php artisan make:command RedisSubscribe

    引用官网上说的

    Redis 还提供了调用 Redis 的publish 和 subscribe 命令的接口。这些 Redis 命令允许你在给定“频道”监听消息,你可以从另外一个应用发布消息到这个频道,甚至使用其它编程语言,从而允许你在不同的应用/进程之间轻松通信。
    
    首先,让我们使用 subscribe 方法通过 Redis 在一个频道上设置监听器。由于调用 subscribe 方法会开启一个常驻进程,我们将在 Artisan 命令中调用该方法:

    redis必须开启一个轮询监听频道滴服务进程,也就是上面说的 在 Artisan 命令中调用,如何调用?稍后测试下,
    执行上诉命令后会看到:

    <?php
    
    namespace AppConsoleCommands;
    
    use IlluminateConsoleCommand;
    use IlluminateSupportFacadesRedis;
    class RedisSubscribe extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'redis:subscribe';
    
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Subscribe to a Redis channel';
    
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
            parent::__construct();
        }
    
        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            Redis::psubscribe(['user-channel'], function($message) {
                echo $message;
            });
        }
    }
    $signature 这里的配置会执行以下命名后看到:
    php artisan list

    比如我滴是:

    现在,我们可以使用 publish 发布消息到该频道:

    在执行以下代码前 现在控制台中输入:php artisan redis:subscribe 启动服务进程

    Route::get('test', function () {
        // 路由逻辑...
      Redis::publish('user-channel', json_encode(['username' => 'mary','message'=>'i miss you']));
     });

    浏览器访问localhist:/test 执行上面的路由发布消息,会看到窗口中会接受到消息推送

    一个消息发布/订阅基本实现了,那么问题来了,如何在web端实现消息订阅呢?
    官网是这样说滴:

    通过代码调用命令

    有时候你可能希望在 CLI 之外执行 Artisan 命令,比如,你可能希望在路由或控制器中触发 Artisan 命令,你可以使用 Artisan 门面上的call 方法来完成这个功能。call 方法接收被执行的命令名称作为第一个参数,命令参数数组作为第二个参数,退出代码被返回:

    那么我这里应该是

    Route::get('/get', function () {
        $exitCode = Artisan::call('redis:subscribe');//这里应该是代码启动进程监听的命令了
    });

    结果一直超时并不成功!...

    对于laravel 的消息订阅模式..web端如何完整实现?如果有路过大神玩过,请留下宝贵的笔迹在下参考学习下额

  • 相关阅读:
    LA3523 二分图和点双连通分量的综合性质及证明
    LA4127计算几何+离散化+点覆盖
    LA 4728凸包算法-旋转卡壳的直径
    UVA 11168凸包+距离公式
    UVA 10652凸包+面的旋转
    UVA10969计算几何+交叉圆形成的圆弧长
    LA3485二分+求解积分方程+辛普森算法计算积分
    LA5009三分法
    UVA10341幂函数零点的通解分析
    UVA11524构造系数数组+高斯消元解异或方程组
  • 原文地址:https://www.cnblogs.com/phpper/p/6867786.html
Copyright © 2011-2022 走看看