Всем хорошего времени суток. Начал разбираться с сокетами. На 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
Буду благодарен за любую подсказку
Использую API telegram для отправки сообщений в каналНужно получить результат, как показано на примере ниже, что бы вверху был текст, внизу изображение