Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- КЛИЕНТСКАЯ:
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <script>
- ws = new WebSocket("ws://localhost:8000/server.php/?user=tester01");
- ws.onmessage = function(evt) {alert(evt.data);};
- </script>
- </head>
- </html>
- SERVER:
- <?php
- require_once __DIR__ . '/vendor/autoload.php';
- use Workerman\Worker;
- // массив для связи соединения пользователя и необходимого нам параметра
- $users = [];
- // создаём ws-сервер, к которому будут подключаться все наши пользователи
- $ws_worker = new Worker("websocket://0.0.0.0:8000");
- $ws_worker->count = 4;
- $ws_worker->onConnect = function($connection){
- echo "New connection\n";
- };
- // создаём обработчик, который будет выполняться при запуске ws-сервера
- $ws_worker->onWorkerStart = function() use (&$users)
- {
- // создаём локальный tcp-сервер, чтобы отправлять на него сообщения из кода нашего сайта
- $inner_tcp_worker = new Worker("tcp://localhost:1234");
- // создаём обработчик сообщений, который будет срабатывать,
- // когда на локальный 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['user']] = $connection;
- // вместо get-параметра можно также использовать параметр из cookie, например $_COOKIE['PHPSESSID']
- };
- };
- $ws_worker->onClose = function($connection) use(&$users)
- {
- // удаляем параметр при отключении пользователя
- $user = array_search($connection, $users);
- unset($users[$user]);
- };
- // Run worker
- Worker::runAll();
- SEND:
- <?php
- $localsocket = 'tcp://localhost:1234/server.php';
- $user = 'tester01';
- $message = 'test';
- // соединяемся с локальным tcp-сервером
- $instance = stream_socket_client($localsocket);
- // отправляем сообщение
- fwrite($instance, json_encode(['user' => $user, 'message' => $message]) . "\n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement