Перенос socket сервера на yii2

110
23 августа 2019, 19:00

Всем хорошего времени суток. Начал разбираться с сокетами. На php наткнулся вот на такой код:

    // массив для связи соединения пользователя и необходимого нам параметра
    $users = [];
    // создаём ws-сервер, к которому будут подключаться все наши пользователи
    $ws_worker = new Worker("websocket://0.0.0.0:1000");
    // создаём обработчик, который будет выполняться при запуске ws-сервера
    $ws_worker->onWorkerStart = function() use (&$users)
    {
        // создаём локальный tcp-сервер, чтобы отправлять на него сообщения из кода нашего сайта
        $inner_tcp_worker = new Worker("tcp://127.0.0.1:10000");
        // создаём обработчик сообщений, который будет срабатывать,
        // когда на локальный tcp-сокет приходит сообщение
        $inner_tcp_worker->onMessage = function($connection, $data) use (&$users) {
            $data = json_decode($data);
            // отправляем сообщение пользователю по userId
            if (isset($users[$data->user])) {
                $webconnection = $users[$data->user];
                $webconnection->send($data->message);
            }
        };
        $inner_tcp_worker->listen();
    };
    $ws_worker->onConnect = function($connection) use (&$users)
    {
        $connection->onWebSocketConnect = function($connection) use (&$users)
        {
            // при подключении нового пользователя сохраняем get-параметр, который же сами и передали со страницы сайта
            $users[$_GET['shop']] = $connection;
            // вместо get-параметра можно также использовать параметр из cookie, например $_COOKIE['PHPSESSID']
            echo 'Підключено пристрій ID '.$_GET['shop'];
        };
    };
    $ws_worker->onClose = function($connection) use(&$users)
    {
        // удаляем параметр при отключении пользователя
        $user = array_search($connection, $users);
        unset($users[$user]);
    };
    // Run worker
    Worker::runAll();

Сервер для теста был запущен на неделю, показал себя хорошо, ни разу не "упал", работал справно.

Так как я в основном работаю с yii2 (пробовал разные плагины для yii2 - все либо "падаю" либо вообще не запускаются), решено было перенести этот код под yii2.

Создал консольный контроллер, в нес метод и запихнул туда код. Пробую запустить код и получаю такое:

Unknown command: socket
Usage: php yourfile <command> [mode]
Commands: 
start           Start worker in DEBUG mode.
            Use mode -d to start in DAEMON mode.
stop            Stop worker.
            Use mode -g to stop gracefully.
restart         Restart workers.
            Use mode -d to start in DAEMON mode.
            Use mode -g to stop gracefully.
reload          Reload codes.
            Use mode -g to reload gracefully.
status          Get worker status.
            Use mode -d to show live status.
connections     Get worker connections.

Первый вариант я запускал командой

php server.php start

А как мне переделать, что бы я мог запустить на yii2 так:

php yii socket start

или

php yii socket/start

Буду благодарен за любую подсказку

READ ALSO
Авторизация на сайте посредством curl

Авторизация на сайте посредством curl

Авторизируюсь на сайте через cURL записываю куки в файл

92
telegram api php sendMessage

telegram api php sendMessage

Использую API telegram для отправки сообщений в каналНужно получить результат, как показано на примере ниже, что бы вверху был текст, внизу изображение

133
Виджет для подключения к каналу telegram

Виджет для подключения к каналу telegram

Стоит задача сделать данный виджет,

117
Парсинг DOCX файла

Парсинг DOCX файла

Всем доброго времени сутокПомогите решить одну задачу

114