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端如何完整實現?若是有路過大神玩過,請留下寶貴的筆跡在下參考學習下額