定时器是每隔1秒运行,为什么就入了一次队列后就不执行了,麻烦walkor帮忙看下新手感谢
Redis扩展是阻塞式调用的,如果业务一直阻塞在某个redis调用并且一直不返回,或者说业务代码一直占用进程控制权,workerman内核就得不到进程运行的控制权,就无法执行定时器。 如果你需要redis队列,可以直接用 https://www.workerman.net/doc/workerman/components/workerman-redis-queue.html
public static function onWorkerStart() { #订阅通知 $client = new Client('redis://127.0.0.1:6379'); $client->subscribe('chat_yuyue', function($value){ if($value){ $self = new self(); $self->redis_yuyue($value); } }); $client->subscribe('chat', function($value){ $self = new self(); $self->redis_timeout($value); }); }
这样写可以么
Redis扩展是阻塞式调用的,如果业务一直阻塞在某个redis调用并且一直不返回,或者说业务代码一直占用进程控制权,workerman内核就得不到进程运行的控制权,就无法执行定时器。
如果你需要redis队列,可以直接用 https://www.workerman.net/doc/workerman/components/workerman-redis-queue.html
这样写可以么