× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Coroutine\Http\Server

完全协程化的Http服务器实现。与Http\Server的不同之处:

  • 可以在运行时动态地创建、销毁
  • 对连接的处理是在单独的子协程中完成,客户端连接的ConnectRequestResponseClose是完全串行的

需要4.4或更高版本

若编译时开启了HTTP2, 则默认会启用HTTP2协议支持, 无需配置 (注: v4.4.16以下版本HTTP2支持存在已知BUG, 请升级后使用)

短命名

可使用Co\Http\Server短名。

继承关系

Co\Http\Server继承自Co\Server,绝大部分类方法与Co\Server完全一致,可直接使用,包括:

  • __construct构造方法
  • set
  • start
  • shutdown

在本章节中只提供差异方法的文档

使用实例

go(function () {
    $server = new Co\Http\Server("127.0.0.1", 9502, false);
    $server->handle('/', function ($request, $response) {
        $response->end("<h1>Index</h1>");
    });
    $server->handle('/test', function ($request, $response) {
        $response->end("<h1>Test</h1>");
    });
    $server->handle('/stop', function ($request, $response) use ($server) {
        $response->end("<h1>Stop</h1>");
        $server->shutdown();
    });
    $server->start();
});


  • 起个网名真难

    $server = new Co\Http\Server("127.0.0.1", 9502, false); $server->set([ 'document_root' => '/data/wwwroot/thinkphp/public/', // 配置静态文件根目录 'enable_static_handler' => true ]); ... 不能配置静态目录么?

  • ……

    Co\Http\Server("0.0.0.0", 8080, true), 用abs压力测试,-c 10 -n 10 便程序崩溃,报:

    [2020-01-08 10:17:24 @3847.0] WARNING accept(:1295): new Socket() failed, Error:Connection reset by peer[104] PHP Warning: Swoole\Coroutine\Http\Server::start(): accept failed, Error: Connection reset by peer[104] in xxxxx... Warning: Swoole\Coroutine\Http\Server::start(): accept failed, Error: Connection reset by peer[104] in xxxxx...

    但是swoole\http\server并没有问题,是需要配置什么可以支持Co\Http\Server稳定吗?实际应用中是否应该选择的是swoole\http\server?