Описание
С версии workerman 4.x поддержка HTTP-сервисов была улучшена. Были введены классы запроса, ответа, сессии, а также SSE. Если вы хотите использовать HTTP-сервисы workerman, настоятельно рекомендуется использовать workerman версии 4.x или более поздние.
Обратите внимание, что ниже приведены примеры кода для версии workerman 4.x, которые несовместимы с workerman 3.x.
Получение объекта запроса
Объект запроса всегда извлекается в функции обратного вызова onMessage, и фреймворк автоматически передает объект Request через второй параметр функции обратного вызова.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
// $request является объектом запроса, здесь ничего с ним не выполняется, просто возвращается hello браузеру
$connection->send("hello");
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080, будет возвращено hello.
Получение параметров запроса get
Получение всего массива get
$get = $request->get();
Если в запросе нет параметров get, то возвращается пустой массив.
Получение конкретного значения из массива get
$name = $request->get('name');
Если в массиве get нет этого значения, возвращается null.
Вы также можете передать вторым параметром в метод get значение по умолчанию; если соответствующее значение в массиве get не найдено, возвращается значение по умолчанию. Например:
$name = $request->get('name', 'tom');
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->get('name'));
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080?name=jerry&age=12, вернется jerry.
Получение параметров запроса post
Получение всего массива post
$post = $request->post();
Если в запросе нет параметров post, возвращается пустой массив.
Получение конкретного значения из массива post
$name = $request->post('name');
Если в массиве post нет этого значения, возвращается null.
Как и в методе get, вы также можете передать вторым параметром в метод post значение по умолчанию; если соответствующее значение в массиве post не найдено, возвращается значение по умолчанию. Например:
$name = $request->post('name', 'tom');
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = $request->post();
$connection->send(var_export($post, true));
};
// Запуск worker
Worker::runAll();
Получение необработанного тела post запроса
$post = $request->rawBody();
Эта функция аналогична команде file_get_contents("php://input"); в php-fpm. Она используется для получения необработанного тела HTTP-запроса. Это полезно для получения пост-данных в нестандартном формате, отличном от application/x-www-form-urlencoded.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = json_decode($request->rawBody());
$connection->send('hello');
};
// Запуск worker
Worker::runAll();
Получение заголовков
Получение всего массива заголовков
$headers = $request->header();
Если в запросе нет заголовков, возвращается пустой массив. Обратите внимание, что все ключи находятся в нижнем регистре.
Получение конкретного значения из массива заголовков
$host = $request->header('host');
Если в массиве заголовков нет этого значения, возвращается null. Обратите внимание, что все ключи находятся в нижнем регистре.
Как и в методе get, вы также можете передать вторым параметром в метод header значение по умолчанию; если соответствующее значение в массиве заголовков не найдено, возвращается значение по умолчанию. Например:
$host = $request->header('host', 'localhost');
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
if ($request->header('connection') === 'keep-alive') {
$connection->send('hello');
} else {
$connection->close('hello');
}
};
// Запуск worker
Worker::runAll();
Получение cookie
Получение всего массива cookie
$cookies = $request->cookie();
Если в запросе нет параметров cookie, возвращается пустой массив.
Получение конкретного значения из массива cookie
$name = $request->cookie('name');
Если в массиве cookie нет этого значения, возвращается null.
Как и в методе get, вы также можете передать вторым параметром в метод cookie значение по умолчанию; если соответствующее значение в массиве cookie не найдено, возвращается значение по умолчанию. Например:
$name = $request->cookie('name', 'tom');
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$cookie = $request->cookie();
$connection->send(var_export($cookie, true));
};
// Запуск worker
Worker::runAll();
Получение загруженных файлов
Получение всего массива загруженных файлов
$files = $request->file();
Формат возвращаемого файла аналогичен:
array (
'avatar' => array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
),
'anotherfile' => array (
'name' => '456.txt',
'tmp_name' => '/tmp/workerman.upload.9sirSws',
'size' => 490,
'error' => 0,
'type' => 'text/plain',
)
)
Где:
- name - имя файла
- tmp_name - временное местоположение файла на диске
- size - размер файла
- error - код ошибки
- type - тип файла mine.
Обратите внимание:
-
Размер загружаемого файла ограничен значением defaultMaxPackageSize, по умолчанию 10M, можно изменить.
-
После завершения запроса файл будет автоматически очищен.
-
Если в запросе не было загруженных файлов, возвращается пустой массив.
Получение конкретного загруженного файла
$avatar_file = $request->file('avatar');
Возвращает аналогичный массив:
array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
)
Если загруженный файл отсутствует, возвращается null.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$file = $request->file('avatar');
if ($file && $file['error'] === UPLOAD_ERR_OK) {
rename($file['tmp_name'], '/home/www/web/public/123.jpg');
$connection->send('ok');
return;
}
$connection->send('upload fail');
};
// Запуск worker
Worker::runAll();
Получение host
Получение информации о host запроса.
$host = $request->host();
Если адрес запроса имеет нестандартные порты, отличные от 80 или 443, информация о host может включать порт, например example.com:8080. Если порт не требуется, в качестве первого параметра можно передать true.
$host = $request->host(true);
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->host());
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080?name=tom, будет возвращено 127.0.0.1:8080.
Получение метода запроса
$method = $request->method();
Возвращаемое значение может быть одним из GET, POST, PUT, DELETE, OPTIONS, HEAD.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->method());
};
// Запуск worker
Worker::runAll();
Получение uri запроса
$uri = $request->uri();
Возвращает uri запроса, включая часть path и queryString.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->uri());
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080/user/get.php?uid=10&type=2, будет возвращено /user/get.php?uid=10&type=2.
Получение пути запроса
$path = $request->path();
Возвращает часть path запроса.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->path());
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080/user/get.php?uid=10&type=2, будет возвращено /user/get.php.
Получение queryString запроса
$query_string = $request->queryString();
Возвращает часть queryString запроса.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->queryString());
};
// Запуск worker
Worker::runAll();
Когда браузер обращается к http://127.0.0.1:8080/user/get.php?uid=10&type=2, будет возвращено uid=10&type=2.
Получение версии HTTP запроса
$version = $request->protocolVersion();
Возвращает строку 1.1 или 1.0.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->protocolVersion());
};
// Запуск worker
Worker::runAll();
Получение sessionId запроса
$sid = $request->sessionId();
Возвращает строку, состоящую из букв и цифр.
Пример
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->sessionId());
};
// Запуск worker
Worker::runAll();