Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.23 KB | None | 0 0
  1. <?php
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. use Workerman\Worker;
  4.  
  5. // массив для связи соединения пользователя и необходимого нам параметра
  6. $users = [];
  7.  
  8. // создаём ws-сервер, к которому будут подключаться все наши пользователи
  9. $ws_worker = new Worker("websocket://0.0.0.0:8000");
  10. // создаём обработчик, который будет выполняться при запуске ws-сервера
  11. $ws_worker->onWorkerStart = function() use (&$users)
  12. {
  13.     // создаём локальный tcp-сервер, чтобы отправлять на него сообщения из кода нашего сайта
  14.     $inner_tcp_worker = new Worker("tcp://127.0.0.1:1234");
  15.     // создаём обработчик сообщений, который будет срабатывать,
  16.     // когда на локальный tcp-сокет приходит сообщение
  17.     $inner_tcp_worker->onMessage = function($connection, $data) use (&$users) {
  18.         $data = json_decode($data);
  19.         // отправляем сообщение пользователю по userId
  20.         if (isset($users[$data->user])) {
  21.             $webconnection = $users[$data->user];
  22.             $webconnection->send($data->message);
  23.         }
  24.     };
  25.     $inner_tcp_worker->listen();
  26. };
  27.  
  28. $ws_worker->onConnect = function($connection) use (&$users)
  29. {
  30.     $connection->onWebSocketConnect = function($connection) use (&$users)
  31.     {
  32.         // при подключении нового пользователя сохраняем get-параметр, который же сами и передали со страницы сайта
  33.         $users[$_GET['user']] = $connection;
  34.         // вместо get-параметра можно также использовать параметр из cookie, например $_COOKIE['PHPSESSID']
  35.     };
  36. };
  37.  
  38. $ws_worker->onClose = function($connection) use(&$users)
  39. {
  40.     // удаляем параметр при отключении пользователя
  41.     $user = array_search($connection, $users);
  42.     unset($users[$user]);
  43. };
  44.  
  45. // Run worker
  46. Worker::runAll();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement