首页 热点资讯 义务教育 高等教育 出国留学 考研考公

在swoole 里面 swoole\coroutine\redis 没有发现怎么回事

发布网友 发布时间:2022-04-25 01:16

我来回答

2个回答

懂视网 时间:2022-04-07 10:26

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' => [
  '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 = 'redis:subscribe';
 /**
 * The console command description.
 *
 * @var string
 */
 protected $description = 'deamon process to subscribe redis broadcast';
 /**
 * 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 RedisTest
";
  Event::fire(new RedisTest($result[2]));
  }
 });
 $client->connect('127.0.0.1', 6379, function (swoole_redis $client, $result) {
  echo "connect
";
  $client->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监听功能实现

热心网友 时间:2022-04-07 07:34

先启动>redis_client->connect,然后再调用swoole_server时报错:
PHP Fatal error: swoole_server::__construct(): eventLoop has been created. Unable to create swoole_server

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com