Workerman+БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
gashik100
Сообщения: 1
Зарегистрирован: 2023.04.30, 00:49

Workerman+БД

Сообщение gashik100 »

Приветствую всех!
Проблема такая, при указании кол-ва воркеров больше 1, возникают проблемы с базой данных, воркер падает с эксепшеном:
[PDOException] SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Я может быть не правильно понимаю, но получается, под каждый воркер нужен свой экземпляр базы? Как можно решить эту проблему?

Код: Выделить всё

<?php

namespace app\commands;

use app\models\user\User;
use yii\console\Controller;
use Workerman\Worker;
use Workerman\Timer;

class WorkerController extends Controller
{
	...

	public function initWorker()
    {
        $port = 3000;

        $wsWoker = new Worker("websocket://127.0.0.1:$port");

        //4 processes
        $wsWoker->count = 1;


        $self = $this;
        $wsWoker->onWorkerStart = function ($worker) use ($self) {
			...
            Timer::add(10, function () use ($self) {
                $users = array_keys($self->_users);
                if (!empty($users)) {
                    $model = User::find()->where(['in', 'id', $users])->all();
					...
                }
            });
        };

        ...
        $wsWoker->onMessage = function ($connection, $data) {
            $this->onMessage($connection, $data);
			...
			$model = User::findOne($id);
        };
    }

    private function start($daemon = false)
    {
        $this->initWorker();
        global $argv;
        $argv[0] = $argv[1];
        $argv[1] = 'start';
        if ($this->daemon) {
            $argv[2] = '-d';
        }
        Worker::runAll();
    }

}
Ответить