waiter-http / waiter
用PHP编写的并不优雅的HTTP服务器
dev-main
2022-08-24 18:29 UTC
Requires
- php: ^8.1
- ext-pcntl: ^8.1
- laminas/laminas-diactoros: ^2.14
- psr/http-server-middleware: ^1.0
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
- 搜索静态、公共资产的目录