waiter-http/waiter

用PHP编写的并不优雅的HTTP服务器

dev-main 2022-08-24 18:29 UTC

This package is auto-updated.

Last update: 2024-08-24 22:55:35 UTC


README

用PHP编写的并不优雅的HTTP服务器

让我们把HTTP服务器和直接访问PHP代码结合起来。有什么坏处呢?

安装

使用composer进行安装

composer require waiter-http/waiter

要求

  • PHP 8.1或更高版本
  • 一个PSR-15兼容的中间件栈来处理请求

使用方法

Waiter HTTP服务器是一个小型、单线程的HTTP服务器,它创建一个PSR-15兼容的请求对象,将其传递给一个PSR-15兼容的处理程序,并将响应返回给客户端。您定义IP、端口和公共文件目录,传递一个中间件处理程序,然后让系统继续。

例如,您可以使用pocket-framework/framework来定义您的路由和动作/控制器,并将框架应用程序传递给Waiter。

// public/index.php
use DI\ContainerBuilder;
use Waiter\Waiter\Server;
use FastRoute\RouteCollector;
use PocketFramework\Framework\Application;
use PocketFramework\Framework\Router\RouteProcessor;

require_once __DIR__ . '/../vendor/autoload.php';

// Bootstrap Pocket Framework
$container = (new ContainerBuilder())->build();
$dispatcher = FastRoute\simpleDispatcher(function (RouteCollector $r) {
    $processor = new RouteProcessor(realpath(__DIR__ . '/../src/HTTP/'), 'Dragonmantank\\MyApp\\HTTP\\');
    $processor->addRoutes($r);
});
$app = new Application($dispatcher, $container);

// Create the HTTP server and pass it the Pocket Framework instance
$waiter = new Server('127.0.0.1', 3000, __DIR__);
$waiter->setHandler($app);
$waiter->run();

在上面的示例中,Waiter将在127.0.0.1 IP地址的3000端口上监听。然后,它将等待HTTP请求的到来。文本通过laminas/laminas-diactoros被转换成PSR-7请求。请求被传递给任何PSR-15兼容的中间件运行器,在这个例子中是由Pocket Framework提供的。Pocket Framework将返回一个PSR-7响应对象,Waiter将反序列化对象回文本并将其返回给客户端。

Waiter能够处理并发连接,因此部分是异步的。还需要做更多的工作来使其更异步。根据实际的PSR-15处理程序,Waiter在合成测试和最小的路由集下已经显示出能够处理高达300个并发连接。

配置

Waiter将三个配置参数传递给其Server对象

  • $listenAddress - 绑定和监听套接字连接的IP地址
  • $listenPortNumber - 监听连接的端口号
  • $publicAssets - 搜索静态、公共资产的目录