高性能 Http 服务

    imi v1.0.13 版本新增了一个 Swoole\Coroutine\Http\Server 实现的协程服务器。需要 Swoole 4.4+ 才可使用该特性。

    该特性是可选的,不影响以前使用的服务器模式。

    使用协程服务器特性,依靠 Linux 系统的端口重用机制,系统级的负载均衡,可以让你的多进程 Http 服务处理请求的能力得到提升。

    使用 ab,本机->虚拟机(双核+2进程)压测Hello World 页面,相比之前的服务器模式大概有 80% 的性能提升。该数据仅供参考,不同配置、环境、业务代码跑出来的数字会有差距,但很明显,协程服务器可以实现更高性能的 Http 服务。

    使用方式

    我们通常使用 vendor/bin/imi server/start 来启动服务器

    启动主服务器:vendor/bin/imi server/start -name main

    启动子服务器:vendor/bin/imi server/start -name 子服务器名

    指定进程数:

    启动主服务器:vendor/bin/imi server/start -name main -workerNum 4

    进程数参数是可以忽略的,优先读取配置文件中的 @app.mainServer.configs.worker_num 配置,如果该配置项不存在则使用 CPU 核心数作为进程数量。

    优缺点比较

    优点

    • 👍高性能,Linux 系统级的负载均衡
    • 💪高度可控,使用 imi 自研进程池维护 Worker 进程
    • ☕无缝支持,业务代码无需做任何更改,即可享受到高性能

    缺点

    • 不支持 Task 特性
    • 不支持监听多端口、多协议

    总结

    使用该特性,可以享受到高性能带来的好处,但是无法使用 Task,以及多端口多协议监听。

    对于开发 Http API 的场景来讲,是非常适合用这个特性的。

    独占事件

    IMI.CO_SERVER.START

    协程服务器开始事件

    可通过 $e->getTarget() 获取 CoServer 对象。