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

(например, простой сервер Websocket чат-программы)

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

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

2. Импортируйте vendor/autoload.php (создается после установки composer)

Создайте 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}] сказал: $data");
    }
}

// Когда клиент отключается, сообщите всем клиентам
function handle_close($connection)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {
        $conn->send("user[{$connection->uid}] вышел");
    }
}

// Создайте 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