關於laravel5 消息訂閱/發佈的理解初

laravel5.4
感受官網文檔說滴不夠詳細...安裝predis官網很詳細,這裏略過....php

生成命令

直接使用 Artisan 命令 make:command,該命令會在 app/Console/Commands 目錄下建立一個新的命令類。若是該目錄不存在,不用擔憂,它將會在你首次運行 Artisan 命令 make:command 時被建立。生成的命令將會包含默認的屬性設置以及全部命令都共有的方法,laravel

這裏我生成一個RedisSubscribe.php類,執行下面命令:web

php artisan make:command RedisSubscribe

引用官網上說的redis

Redis 還提供了調用 Redis 的publish 和 subscribe 命令的接口。這些 Redis 命令容許你在給定「頻道」監聽消息,你能夠從另一個應用發佈消息到這個頻道,甚至使用其它編程語言,從而容許你在不一樣的應用/進程之間輕鬆通訊。

首先,讓咱們使用 subscribe 方法經過 Redis 在一個頻道上設置監聽器。因爲調用 subscribe 方法會開啓一個常駐進程,咱們將在 Artisan 命令中調用該方法:

redis必須開啓一個輪詢監聽頻道滴服務進程,也就是上面說的 在 Artisan 命令中調用,如何調用?稍後測試下,
執行上訴命令後會看到:編程

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;
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

好比我滴是:
json

如今,咱們可使用 publish 發佈消息到該頻道:數組

在執行如下代碼前 如今控制檯中輸入:php artisan redis:subscribe 啓動服務進程瀏覽器

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

瀏覽器訪問localhist:/test 執行上面的路由發佈消息,會看到窗口中會接受到消息推送

app

一個消息發佈/訂閱基本實現了,那麼問題來了,如何在web端實現消息訂閱呢?
官網是這樣說滴:編程語言

經過代碼調用命令

有時候你可能但願在 CLI 以外執行 Artisan 命令,好比,你可能但願在路由或控制器中觸發 Artisan 命令,你可使用 Artisan 門面上的call 方法來完成這個功能。call 方法接收被執行的命令名稱做爲第一個參數,命令參數數組做爲第二個參數,退出代碼被返回:

那麼我這裏應該是

Route::get('/get', function () {
    $exitCode = \Artisan::call('redis:subscribe');//這裏應該是代碼啓動進程監聽的命令了
});

結果一直超時並不成功!...

 

對於laravel 的消息訂閱模式..web端如何完整實現?若是有路過大神玩過,請留下寶貴的筆跡在下參考學習下額

相關文章
相關標籤/搜索