Простой пример разработки

Установка

Установка workerman
В пустом каталоге выполните
composer require workerman/workerman

Пример 1. Предоставление веб-сервиса с использованием протокола HTTP

Создайте файл start.php

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

// Создание Worker, который слушает порт 2345 и использует протокол http для связи
$http_worker = new Worker("http://0.0.0.0:2345");

// Запуск 4 процессов для предоставления услуг
$http_worker->count = 4;

// При получении данных от браузера ответить hello world
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // Отправить браузеру hello world
    $connection->send('hello world');
};

// Запуск worker
Worker::runAll();

Запуск через командную строку (пользователи Windows используют cmd命令行,и так далее)

php start.php start

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

Предположим, что IP сервера 127.0.0.1

Откройте браузер и зайдите по URL http://127.0.0.1:2345

Внимание:

  1. Если возникли проблемы с доступом, обратитесь к разделу Причины неудачного подключения клиента для устранения неполадок.

  2. Сервер использует протокол http и может общаться только по протоколу http, другие протоколы, такие как websocket, не могут быть использованы для прямого общения.

Пример 2. Предоставление услуг с использованием протокола WebSocket

Создайте файл ws_test.php

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

// Внимание: здесь используется протокол websocket, в отличие от предыдущего примера
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// Запуск 4 процессов для предоставления услуг
$ws_worker->count = 4;

// При получении данных от клиента вернуть hello $data
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Отправить клиенту hello $data
    $connection->send('hello ' . $data);
};

// Запуск worker
Worker::runAll();

Запуск через командную строку

php ws_test.php start

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

Откройте браузер Chrome, нажмите F12 для открытия консоли разработчика, введите в разделе Console (или вставьте нижеуказанный код в html-страницу для выполнения с помощью js)

// Предположим, что IP сервера 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("Подключение успешно");
    ws.send('tom');
    alert("Отправляем строку на сервер: tom");
};
ws.onmessage = function(e) {
    alert("Получено сообщение от сервера: " + e.data);
};

Внимание:

  1. Если возникли проблемы с доступом, обратитесь к разделу Часто задаваемые вопросы - неудачное подключение для устранения неполадок.

  2. Сервер использует протокол websocket и может общаться только по протоколу websocket, другие протоколы, такие как http, не могут быть использованы для прямого общения.

Пример 3. Прямая передача данных с использованием TCP

Создайте tcp_test.php

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

// Создание Worker, который слушает порт 2347, не используя никакие протоколы приложений
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// Запуск 4 процессов для предоставления услуг
$tcp_worker->count = 4;

// Когда клиент отправляет данные
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Отправить клиенту hello $data
    $connection->send('hello ' . $data);
};

// Запуск worker
Worker::runAll();

Запуск через командную строку

php tcp_test.php start

Тестирование: запуск через командную строку
(Следующий пример показывает поведение в linux, которое отличается от windows)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom

Внимание:

  1. Если возникли проблемы с доступом, обратитесь к разделу Часто задаваемые вопросы - неудачное подключение для устранения неполадок.

  2. Сервер использует голый протокол tcp, другие протоколы, такие как websocket и http, не могут быть использованы для прямого общения.