1. 程式人生 > >關於laravel5 消息訂閱/發布的理解初

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

窗口 img red artisan 訂閱模式 psu .cn 頻道 truct

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 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

比如我滴是:
技術分享

現在,我們可以使用 publish 發布消息到該頻道:

在執行以下代碼前 現在控制臺中輸入:php artisan redis:subscribe 啟動服務進程

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

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

技術分享

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

通過代碼調用命令

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

那麽我這裏應該是

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

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

技術分享

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

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