<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // Create a Websocket server $ws_worker = new Worker("websocket://0.0.0.0:8000"); // 4 processes $ws_worker->count = 4; // Emitted when new connection come $ws_worker->onConnect = function($connection) { echo "New connection\n"; }; // Emitted when data received $ws_worker->onMessage = function($connection, $data) { // Send hello $data $connection->send('hello ' . $data); }; // Emitted when connection closed $ws_worker->onClose = function($connection) { echo "Connection closed\n"; }; // Run worker Worker::runAll();
<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // #### create socket and listen 1234 port #### $tcp_worker = new Worker("tcp://0.0.0.0:1234"); // 4 processes $tcp_worker->count = 4; // Emitted when new connection come $tcp_worker->onConnect = function($connection) { echo "New Connection\n"; }; // Emitted when data received $tcp_worker->onMessage = function($connection, $data) { // send data to client $connection->send("hello $data \n"); }; // Emitted when new connection come $tcp_worker->onClose = function($connection) { echo "Connection closed\n"; }; Worker::runAll();
composer require workerman/workerman
php test.php start
command and in the console we will see:----------------------- WORKERMAN -----------------------------
Workerman version:3.3.6 PHP version:7.0.15-0ubuntu0.16.10.4
------------------------ WORKERS -------------------------------
user worker listen processes status
morozovsk none websocket://0.0.0.0:8000 1 [OK]
----------------------------------------------------------------
php test.php start
php test.php start -d - to demonize the script
php test.php status
php test.php stop
php test.php restart
php test.php restart -d
php test.php reload
<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // $users = []; // ws-, $ws_worker = new Worker("websocket://0.0.0.0:8000"); // , ws- $ws_worker->onWorkerStart = function() use (&$users) { // tcp-, $inner_tcp_worker = new Worker("tcp://127.0.0.1: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();
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <script> ws = new WebSocket("ws://127.0.0.1:8000/?user=tester01"); ws.onmessage = function(evt) {alert(evt.data);}; </script> </head> </html>
<?php $localsocket = 'tcp://127.0.0.1:1234'; $user = 'tester01'; $message = 'test'; // tcp- $instance = stream_socket_client($localsocket); // fwrite($instance, json_encode(['user' => $user, 'message' => $message]) . "\n");
Source: https://habr.com/ru/post/331462/
All Articles