workerman环境下是否有自身php实现的队列功能。我想咨询的并不是依赖redis或其他的服务的方案。而是workerman自己实现的一个服务。
我想要的场景也很简单,其实就是redis的list中的push功能和blPop命令。
有一个进程会向队列插入 id,其他的 进程随时消费获取id。不能出现重复分配。
装redis自然是能用,但是有没有人用workerman实现过这个场景的服务吗。
最终想要的效果代码其实很简单:
<?php
namespace app\common\tools;
class MessageListTools
{
public const LIST_KEY = 'message_list';
public static function getRedis()
{
ini_set('default_socket_timeout', -1);
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
return $redis;
}
public static function push($task_id)
{
$redis = self::getRedis();
$redis->lpush(static::LIST_KEY, $task_id);
return true;
}
public static function pop()
{
$redis = self::getRedis();
return $redis->blPop(static::LIST_KEY,0);
}
}
使用数组可以实现redis的list,但是它是内存变量,重启数据就没了,适合队列里存储不重要可丢失的数据
需要多进程,多client。其实就是想要个很小很小的队列server
php的标准库里面有个数据结构适合你SplQueue
好像挺好的。这样自己只要实现一个小的多进程通信服务就行了。