Простой пример разработки
Установка
Установка 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
Внимание:
-
Если возникли проблемы с доступом, обратитесь к разделу Причины неудачного подключения клиента для устранения неполадок.
-
Сервер использует протокол 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);
};
Внимание:
-
Если возникли проблемы с доступом, обратитесь к разделу Часто задаваемые вопросы - неудачное подключение для устранения неполадок.
-
Сервер использует протокол 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
Внимание:
-
Если возникли проблемы с доступом, обратитесь к разделу Часто задаваемые вопросы - неудачное подключение для устранения неполадок.
-
Сервер использует голый протокол tcp, другие протоколы, такие как websocket и http, не могут быть использованы для прямого общения.