Основной процесс

(Пример с простым сервером чата WebSocket)

1. Создание каталога проекта в любом месте

Например, SimpleChat/
Перейти в каталог и выполнить composer require workerman/workerman

2. Подключение vendor/autoload.php (создается после установки с помощью композера)

Создать start.php и подключить vendor/autoload.php

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

3. Выбор протокола

Здесь мы выбираем текстовый протокол (собственный протокол Workerman с форматом текст + переход на новую строку)

(В настоящее время Workerman поддерживает протоколы HTTP, Websocket, текстовый протокол. Если нужно использовать другие протоколы, обратитесь к главе о протоколах для разработки собственного протокола)

4. Напишите входной запускающий скрипт по необходимости

Приведенный ниже пример - это простой файл входа для чата.

SimpleChat/start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$global_uid = 0;

// При подключении клиента назначается UID, сохраняется соединение и уведомляются все клиенты
function handle_connection($connection)
{
    global $text_worker, $global_uid;
    // Назначаем UID для соединения
    $connection->uid = ++$global_uid;
}

// При получении сообщения от клиента отправляется всем
function handle_message(TcpConnection $connection, $data)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {
        $conn->send("user[{$connection->uid}] said: $data");
    }
}

// При отключении клиента отправляется всем клиентам
function handle_close($connection)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {
        $conn->send("user[{$connection->uid}] logout");
    }
}

// Создаем Worker для прослушивания интерфейса 2347 с текстовым протоколом
$text_worker = new Worker("text://0.0.0.0:2347");

// Запускать только 1 процесс, чтобы облегчить передачу данных между клиентами
$text_worker->count = 1;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();

5. Тестирование

С текстовым протоколом можно провести тестирование с помощью команды telnet

telnet 127.0.0.1 2347