# HTTP服务器

Dce内置了HTTP服务器,是对Swoole\Http\Server进行的封装,所以你必须在有Swoole的PHP环境下才能开启HTTP服务器。

HTTP服务器是以内置项目的形式封装在Dce里面,项目路径为project/http,支持自定义配置、扩展等。

# 配置

HTTP项目配置了HTTP服务器的默认配置,你可以创建APP_COMMON . 'config/http.php'文件自定义覆盖默认配置。下述为默认配置

return [
    'http' => [
        'service' => '\\http\\service\\HttpServer', // HTTP服务器类名,你可以在自定义扩展配置中覆盖定义为服务器子类
        'host' => '0.0.0.0', // 监听主机地址
        'port' => 20460, // 监听端口
        // 'extra_ports' => [['host' => '', 'port' => '']], // 需要额外监听的HTTP端口
        // 'api_host' => '', // HTTP服务器Api主机,如果需要远程管理你的HTTP服务器,可以通过此Rpc接口实现
        // 'api_port' => '', // HTTP服务器Api端口
        // 'api_password' => '', // HTTP服务器Api Rpc密匙
        // 'enable_tcp_ports' => [['host' => '', 'port' => '', 'sock_type' => 0]], // 需要额外监听的TCP端口集,配置后将同时开启TCP支持
    ],
    'swoole_http' => [ // Swoole\Http\Server的配置,将直接传递给\Swoole\Server::set方法使用
        'enable_static_handler' => true,
        'document_root' => APP_WWW,
    ],
    '#extends' => [
        APP_COMMON . 'config/http.php', // 给用户自定义的项目扩展配置路径
    ],
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

上述的swoole_http配置为Swoole\Http\Server的原生配置项,如开启SSL等,都是通过该配置实现,该配置选项众多,你可以到Swoole官网查看详情。

# 接口

HTTP服务器通过控制器\http\controller\HttpServerController暴露接口,这些接口通过节点配置了仅允许以命令行的方式请求。

# start

开启HTTP服务器

# Swoole环境运行
dce http start
# Docker/Podman运行Swoole镜像
docker run --rm --name server -it -v /mnt/f/App/Mine/dce/backend/dce/:/app/ -p 20460:20460 idrunk/swoole /app/dce http start
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman run --rm --name server -it -v /mnt/f/App/Mine/dce/backend/dce/:/app/ -p 20460:20460 idrunk/swoole /app/dce http start

# 成功响应
# Http server started with 0.0.0.0:20460.
1
2
3
4
5
6
7
8
9

# 测试访问

curl http://127.0.0.1:20460/
1

请求成功将响应下述内容

<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>欢迎使用Dce (*´▽`)ノノ</title>
</head>
<body>
<h1>欢迎使用Dce (*´▽`)ノノ</h1>
<p>这是Dce默认HTTP响应页,当你看到它时,表示你的Dce框架成功运行。</p>
<p>本页面仅在你未配置根路径节点时才会显示,如果你配置了根节点,则会渲染显示该节点控制器的响应内容。</p>
<p>你可以通过`omissible_path`属性实现根节点效果,参考下述示例。</p>
<pre>
return [
    [
        "path" => "home",
        "omissible_path" => true,
        "controller" => "IndexController->index",
    ],
];
</pre>
<p>上述配置定义了名为`home`的项目的节点配置,通过设置`omissible_path`为`true`实现可省略路径访问,即你可以通过`http://127.0.0.1/`路径请求`IndexController->index`控制器方法。</p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# stop

关闭HTTP服务器

# Swoole环境运行
dce http stop
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce http stop

# 成功响应
# Http server was stopped.
1
2
3
4
5
6
7

# reload

重载HTTP服务器

# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce http reload

# 成功响应
# Http server was reloaded.
1
2
3
4
5

# status

查看HTTP服务器状态信息

# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce http status

# {
#     "server": {
#         "start_time": 1612894126,
#         "connection_num": 0,
#         "accept_count": 0,
#         "close_count": 0,
#         "worker_num": 8,
#         "idle_worker_num": 8,
#         "task_worker_num": 0,
#         "tasking_num": 0,
#         "request_count": 0,
#         "dispatch_count": 0,
#         "worker_request_count": 0,
#         "worker_dispatch_count": 0,
#         "coroutine_num": 2
#     }
# }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 服务类库

# \http\service\HttpServer

HTTP服务器类,继承于服务器基类,主要在此类中实例化了\Swoole\Http\Server类,并绑定接入了各种Dce业务流。

此类即上述配置service属性的默认值,如果你需要拓展此类或需自定义类作为HTTP服务器类,可以将该配置值设置为你的完整类名,这时调用http start接口将实例化你配置的类。

# \http\service\RawRequestHttpSwoole

Swoole版HTTP原始请求类,本类继承于HTTP原始请求类,实现了该类及各父辈类的抽象方法,完成了相关HTTP请求参数的填充。

你可以自定义HTTP服务器类,并定义\dce\service\server\ServerMatrix::$rawRequestHttpClass属性值为继承拓展此类或自定义原始请求类的类名类,以此方式实现自定义HTTP原始请求类。

# \http\service\CookieSwoole

Swoole版Cookie类,继承并实现了Cookie类