swoole如何監聽redis數據

swoole如何監聽redis數據

swoole如何監聽redis數據?

Laravel使用swoole監聽redis

開始之前,請先確保redis已經正確安裝,并正常運行。

Laravel代碼

在AppEvents目錄下新建RedisTest事件

<?php namespace AppEvents; use IlluminateBroadcastingChannel; use IlluminateQueueSerializesModels; use IlluminateBroadcastingPrivateChannel; use IlluminateBroadcastingPresenceChannel; use IlluminateFoundationEventsDispatchable; use IlluminateBroadcastingInteractsWithSockets; use IlluminateContractsBroadcastingShouldBroadcast; class RedisTest {     use Dispatchable, InteractsWithSockets, SerializesModels;     public $message;     /**     * Create a new event instance.     *     * @return void     */     public function __construct($message)     {         $this->message?=?$message; ????} ????/** ????*?Get?the?channels?the?event?should?broadcast?on. ????* ????*?@return?IlluminateBroadcastingChannel|array ????*/ ????public?function?broadcastOn() ????{ ????????return?new?PrivateChannel('channel-name'); ????} }

AppListenersRedisTestListener 監聽事件代碼

<?php namespace AppListeners; use AppEventsRedisTest; use IlluminateQueueInteractsWithQueue; use IlluminateContractsQueueShouldQueue; use IlluminateSupportFacadesLog; class RedisTestListener {     /**     * Create the event listener.     *     * @return void     */     public function __construct()     {         //     }     /**     * Handle the event.     *     * @param  RedisTest  $event     * @return void     */     public function handle(RedisTest $event)     {         $message = $event->message; ????????Log::info('the?message?received?from?subscribed?redis?channel?msg_0:?'.$message); ????} }

AppProvidersEventServiceProvider 登記事件/監聽關系

protected?$listen?=?[ ????????'AppEventsRedisTest'?=&gt;?[ ????????????'AppListenersRedisTestListener', ????????], ????];

監聽命令

AppConsoleCommandsRedisSubscribe 代碼如下

<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; use swoole_redis; use IlluminateSupportFacadesEvent; use AppEventsRedisTest; class RedisSubscribe extends Command {     /**     * The name and signature of the console command.     *     * @var string     */     protected $signature = &#39;redis:subscribe&#39;;     /**     * The console command description.     *     * @var string     */     protected $description = &#39;deamon process to subscribe redis broadcast&#39;;     /**     * Create a new command instance.     *     * @return void     */     public function __construct()     {         parent::__construct();     }     /**     * Execute the console command.     *     * @return mixed     */     public function handle()     {         $client = new swoole_redis;         $client->on('message',?function?(swoole_redis?$client,?$result)?{ ????????????var_dump($result); ????????????static?$more?=?false; ????????????if?(!$more?and?$result[0]?==?'message') ????????????{ ????????????????echo?"trigger?Event?RedisTestn"; ????????????????Event::fire(new?RedisTest($result[2])); ????????????} ????????}); ????????$client-&gt;connect('127.0.0.1',?6379,?function?(swoole_redis?$client,?$result)?{ ????????????echo?"connectn"; ????????????$client-&gt;subscribe('msg_0'); ????????}); ????} }

Laravel部分代碼完成

==================================

supervisor 管理進程

在 /etc/supervisor/conf.d 文件夾下新建 echo.conf , 代碼如下

[group:echos] programs=echo-queue,echo-redis [program:echo-queue] command=php?artisan?queue:work directory=/home/bella/Downloads/lnmp/echo1.0/echo user=bella autorestart=true redirect_stderr=true stdout_logfile=/home/bella/Downloads/lnmp/echo1.0/echo/storage/logs/queue.log loglevel=info [program:echo-redis] command=php?artisan?redis:subscribe directory=/home/bella/Downloads/lnmp/echo1.0/echo user=bella autorestart=true redirect_stderr=true stdout_logfile=/home/bella/Downloads/lnmp/echo1.0/echo/storage/logs/redis.log loglevel=info

完成后,執行以下命令重載

supervisorctl?reload

=================================

進入redis 客戶端,發布一個廣播通知到 msg_0 頻道

publish?msg_0?"Hello?Bella"

如果 laravel目錄下的 storagelogslaravel.log 最后的日志中記錄了廣播發送的通知,則redis監聽功能實現

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享