Перед golang 40 строк кода для реализации общего пула процессов
Сегодня я прочитал соответствующие документы swoope и реализовал один в PHP, потому что swoole Нет, gelang Из select , поэтому реализация немного проста, но практичность в порядке , а универсальность реализуется с помощью заводской функции.
Официальный пул Вулфа предназначен только для редиса. Поскольку уровень кода пула совместной работы связан с логикой создания экземпляра redis.
class RedisPool
{
/**
* @var \Swoole\Coroutine\Channel
*/
protected $pool;
/**
* RedisPool constructor.
*@ param int $size connection pool size
*/
function __construct($size = 100)
{
$this->pool = new Swoole\Coroutine\Channel($size);
for ($i = 0; $i < $size; $i++)
{
$redis = new Swoole\Coroutine\Redis();
$res = $redis->connect('127.0.0.1', 6379);
if ($res == false)
{
throw new RuntimeException("failed to connect redis server.");
}
else
{
$this->put($redis);
}
}
}
function put($redis)
{
$this->pool->push($redis);
}
function get()
{
return $this->pool->pop();
}
}Преобразование с использованием заводского метода выглядит следующим образом:
Нас не волнует конкретная логика создания соединения в нашем коде, просто вызовите заводской метод.
Адрес проекта
Проект был открыт для GitHub https://github.com/swoole-foundation/swoole-pool