1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hhxsv5-connection-pool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
http_compression => false,
enable_static_handler => false,
buffer_output_size => 4 * 1024 * 1024,
worker_num => 4 // Каждый работник содержит пул соединений
]);
}

protected function bindHttpEvent() {
    $this->swoole->on('Request', function (Request $request, Response $response) {
        $pool1 = $this->getConnectionPool('mysql');
        /**@var MySQL $mysql */
        $mysql = $pool1->borrow();
        $status = $mysql->query('SHOW STATUS LIKE "Threads_connected"');
        // Возвращаем соединение в пул как можно скорее
        $pool1->return($mysql);


        $pool2 = $this->getConnectionPool('redis');
        /**@var \Redis $redis */
        $redis = $pool2->borrow();
        $clients = $redis->info('Clients');
        // Возвращаем соединение в пул как можно скорее
        $pool2->return($redis);

        $json = [
            'status'  => $status,
            'clients' => $clients,
        ];
        // Другая логика
        // ...
        $response->header('Content-Type', 'application/json');
        $response->end(json_encode($json));
    });
}

protected function bindWorkerEvents() {
    $createPools = function () {
        // Все соединения MySQL: [4 работника * 2 = 8, 4 работника * 10 = 40]
        $pool1 = new ConnectionPool(
            [
                'minActive' => 2,
                'maxActive' => 10,
            ],
            new CoroutineMySQLConnector,
            [
                'host'        => '127.0.0.1',
                'port'        => '3306',
                'user'        => 'root',
                'password'    => 'xy123456',
                'database'    => 'mysql',
                'timeout'     => 10,
                'charset'     => 'utf8mb4',
                'strict_type' => true,
                'fetch_mode'  => true,
            ]);
        $pool1->init();
        $this->addConnectionPool('mysql', $pool1);

        // Все подключения Redis: [4 рабочих * 5 = 20, 4 рабочих * 20 = 80]
        $pool2 = new ConnectionPool(
            [
                'minActive' => 5,
                'maxActive' => 20,
            ],
            new PhpRedisConnector,
            [
                'host'     => '127.0.0.1',
                'port'     => '6379',
                'database' => 0,
                'password' => null,
            ]);
        $pool2->init();
        $this->addConnectionPool('redis', $pool2);
    };
    $closePools = function () {
        $this->closeConnectionPools();
    };
    $this->swoole->on('WorkerStart', $createPools);
    $this->swoole->on('WorkerStop', $closePools);
    $this->swoole->on('WorkerError', $closePools);
}

public function start() {
    $this->swoole->start();
}

License

MIT

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

На основе универсального пула соединений Swoole, который часто используется в качестве пула подключений к базе данных. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hhxsv5-connection-pool.git
git@api.gitlife.ru:oschina-mirror/hhxsv5-connection-pool.git
oschina-mirror
hhxsv5-connection-pool
hhxsv5-connection-pool
master