fatcode/http-server

快速、可靠的 psr-15、psr-7 兼容 PHP HTTP 服务器。

1.0.0 2019-04-14 13:43 UTC

This package is auto-updated.

Last update: 2024-09-15 02:35:46 UTC


README

需求

  • >= PHP 7.2
  • swoole 扩展
  • zlib 扩展

安装

composer install fatcode/http-server

快速入门

<?php declare(strict_types=1);

use FatCode\HttpServer\HttpServer;
use FatCode\HttpServer\Server\Router;
use FatCode\HttpServer\Response;

// Instantiates router for registering resources:
$router = new Router();
$router->get('/hello', function () {
    return new Response('Hello You!');
});

// Run server at localhost:80
$server = new HttpServer();
$server->use($router);
$server->start();

上述示例创建了一个使用已注册资源的路由器的服务器。服务器将在 localhost8080 端口上监听。

请注意:该软件包支持 PSR-7,这意味着所有注册的处理程序都应期望以 ServerRequestInterface 作为输入,并以 ResponseInterface 作为结果。

以守护进程运行服务器

HTTP 服务器提供了一个灵活的配置类,根据您的设置,服务器可以被作为守护进程运行、在特定端口上运行、监听特定数量的传入连接等。

更多选项可以在 类本身 中找到。

<?php declare(strict_types=1);

use FatCode\HttpServer\HttpServer;
use FatCode\HttpServer\Server\HttpServerSettings;

// Setting pid file will make server run as a daemon.
$settings = new HttpServerSettings('0.0.0.0', 8080);
$settings->setPidFile(sys_get_temp_dir() . '/my_pid.pid');

// Note this server will always respond with 404 response, as there is
// no router passed that can handle the request.
$server = new HttpServer();
$server->start();

中间件和 PSR-15 支持

注册和使用 PSR-15 兼容的中间件非常简单,只需将给定中间件或闭包的实例传递给 HttpServer::use 方法,按正确的顺序即可。实际上,FatCode\HttpServer\Server\Router 类本身就是 PSR-15 中间件。

<?php declare(strict_types=1);

use FatCode\HttpServer\HttpServer;
use FatCode\HttpServer\Response;
use Psr\Http\Message\ServerRequestInterface;

// Simple pong server.
$server = new HttpServer();
$server->use(function (ServerRequestInterface $request) : Response {
    if ($request->getUri()->getPath() === '/ping') {
        return new Response('Pong!');
    }
    return new Response('Please call /ping uri.');
});
$server->start();

请求、响应和 PSR-7

HTTP 软件包提供了一个基于 zendframework/zend-diactoros 软件包的便捷 PSR-7 实现。简而言之,FatCode\HttpServer\ServerRequestFatCode\HttpServer\Response 对象利用了 zend-diactoros 的异常和接口,并增加了一些功能。在处理这些对象时,请记住这一点。

创建新的响应对象

<?php declare(strict_types=1);

use FatCode\HttpServer\Response;
use FatCode\HttpServer\HttpStatusCode;

// Creates new response with status code 200.
$response = new Response("Hello world!", HttpStatusCode::OK());

为了您的方便,软件包声明了 HttpStatusCode 枚举,它有助于生成有效的 HTTP 响应。更多状态码可以在 类本身 中找到。

处理请求对象

读取路由参数

在声明参数化路由时,您可以通过调用 FatCode\HttpServer\ServerRequest::getAttribute 方法来访问和检索值。考虑以下示例

<?php declare(strict_types=1);

use FatCode\HttpServer\HttpServer;
use Psr\Http\Message\ServerRequestInterface;
use FatCode\HttpServer\Response;
use FatCode\HttpServer\Server\Router;

// Initialize router
$router = new Router();

// Register parametrized route
$router->get('/hello/{name}', function (ServerRequestInterface $request) : Response {
    // Return response
    return new Response("Hello, your name is {$request->getAttribute('name')}");
});

// Setup http server
$server = new HttpServer();
$server->use($router);
$server->start();

更多示例,您可以访问 示例目录