В этой статье приведен пример, показывающий, как использовать HTTP в очереди PHP Для настройки и использования сервера. Подробности заключаются в следующем:
Для нас предусмотрена катушка в классе сервера spool_ http_, удобная для обработки HTTP-запросов.
Однако его поддержка протокола HTTP не завершена, поэтому обычно рекомендуется добавить слой nginx для прокси-сервера, а обработка PHP-файлов должна выполняться с помощью spool.
1. Создайте простую службу HTTP
php //Create an HTTP server service $server = new swoole_http_server('0.0.0.0', 8888); $server->set([ 'package_max_length' => 1024 * 1024 * 10, //Set the temporary directory for file upload 'upload_tmp_dir' => __DIR__ . '/uploads/', ]); //Set request event callback //The function has two arguments: // swoole_ http_ Request object, responsible for HTTP request related information // swoole_ http_ The response object is responsible for responding to relevant information to the client $server->on('request', function (swoole_http_request $request, swoole_http_response $response) { //Request header information var_dump($request->header); //Request related server information, equivalent to PHP$_ SERVER var_dump($request->server); //The get parameter of the request is equivalent to that in PHP$_ GET var_dump($request->get); //The post parameter of the request is equivalent to that in PHP$_ POST var_dump($request->post); //Requested cookie information var_dump($request->cookie); //File upload information, file size does not exceed package_ max_ The value of length var_dump($request->files); // Get the original post request data, which is equivalent to fopen (' php :// input '); var_dump($request->rawContent()); //Get complete HTTP request message var_dump($request->getData()); //Send information to client $response->end('hello'); }); // Start the service $server->start();
2, Обработка статических файлов
Swool создал для нас два параметра конфигурации, которые могут быть реализованы с помощью простой конфигурации.
Однако функция проста, не рекомендуется использовать вне сети, есть необходимость добиваться своего самостоятельно.
set([ //Configure static file root directory 'document_root' => __DIR__ . '/statics/', //Enable the static file request processing function, so that when the request is a static file, spool will automatically search and return in the directory configured above 'enable_static_handler' => true, ]); $server->on('request', function ($request, $response) { }); $server->start();
3, Загрузка файла процесса
set([ //The file upload size does not exceed this value 'package_max_length' => 1024 * 1024 * 50, //Set the temporary directory for file upload 'upload_tmp_dir' => __DIR__ . '/tmp/', 'upload_dir' => __DIR__ . '/uploads/', 'document_root' => __DIR__ . '/statics/', 'enable_static_handler' => true, ]); $server->on('request', function ($request, $response) use ($server) { if ($request->server['path_info'] == '/upload') { $tmp = $request->files['upload']['tmp_name']; $upload = $server->setting['upload_dir'] . $request->files['upload']['name']; if (file_exists($tmp) && move_uploaded_file($tmp, $upload)) { $response->header('Content-Type', 'text/html; charset=UTF-8'); $response - > end ('upload succeeded '); } else { $ response -> end (' Upload failed '); } } }); // Start the service $server->start();
Давайте создадим его в каталоге статистики upload.html Файл:
< title > file upload
4、 Автоматическая загрузка файла маршрута обработки
set([ //Directory of configuration items 'project_path' => __DIR__ . '/src/', ]); $server->on('WorkerStart', function ($server, $worker_id) { // Register autoloaders spl_autoload_register(function ($class) use($server) { $class = $server->setting['project_path'] . str_replace('\', DIRECTORY_SEPARATOR, $class) . '.php'; if (file_exists($class)) { include_once $class; } }); }); $server->on('request', function ($request, $response) use ($server) { $pathInfo = explode('/', ltrim($request->server['path_info'], '/')); //Module / controller / method $module = $pathInfo[0] ?? 'Index'; $controller = $pathInfo[1] ?? 'Index'; $method = $pathInfo[2] ?? 'index'; try { $class = "\{$module}\{$controller}"; $result = (new $class)->{$method}(); $response->end($result); } catch (\Throwable $e) { $response->end($e->getMessage()); } }); // Start the service $server->start();
Мы создаем каталог тестов в каталоге SRC и создаем test.php файл
Затем посетите 127.0.0.1:8888/тест/тест/тест Вы можете увидеть возвращенные результаты.
примите $запрос->сервер['path_info']
Чтобы найти модуль, контроллер, метод, а затем зарегистрировать нашу собственную функцию загрузки, импортируйте файл. Создайте экземпляр объекта класса, затем вызовите метод и верните результат.
Будьте осторожны, чтобы не поместить регистр SPL_ autoload_ в функцию обратного вызова события OnStart.
При обратном вызове OnStart разрешены только эхо, печать журнала и изменение имени процесса. Не выполняйте других операций.
Для получения дополнительной информации о PHP читатели, интересующиеся им, могут ознакомиться со следующими темами: краткое описание навыков сетевого программирования PHP, краткое описание использования сокетов PHP, вводный курс объектно-ориентированного программирования PHP, учебник по структуре и алгоритму данных PHP, а также краткое описание алгоритма программирования PHP
Я надеюсь, что эта статья будет полезна для программирования на PHP.