当前位置:  首页>> 技术小册>> Swoole高性能框架-Hyperf

服务器要求

Hyperf 对系统环境有一些要求,当您使用 Swoole 网络引擎驱动时,仅可运行于 Linux 和 Mac 环境下,但由于 Docker 虚拟化技术的发展,在 Windows 下也可以通过 Docker for Windows 来作为运行环境,通常来说 Mac 环境下,我们更推荐本地环境部署,以避免 Docker 共享磁盘缓慢导致 Hyperf 启动速度慢的问题。当您使用 Swow 网络引擎驱动时,则可在 Windows、Linux、Mac 下运行。

hyperf/hyperf-docker 项目内已经为您准备好了各种版本的 Dockerfile ,或直接基于已经构建好的 hyperf/hyperf 镜像来运行。

当您不想采用 Docker 来作为运行的环境基础时,也可以考虑使用 Box 来作为运行的基础环境,如果您希望自行完成环境搭建,则您需要确保您的运行环境达到了以下的要求:

  • PHP >= 8.0
  • 以下任一网络引擎
  • Swoole PHP 扩展 >= 4.5,并关闭了 Short Name
  • Swow PHP 扩展
  • JSON PHP 扩展
  • Pcntl PHP 扩展(仅在 Swoole 引擎时)
  • OpenSSL PHP 扩展(如需要使用到 HTTPS)
  • PDO PHP 扩展 (如需要使用到 MySQL 客户端)
  • Redis PHP 扩展 (如需要使用到 Redis 客户端)
  • Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)

安装 Hyperf

Hyperf 使用 Composer 来管理项目的依赖,在使用 Hyperf 之前,请确保你的运行环境已经安装好了 Composer。

通过 Composer 创建项目

我们已经为您准备好的一个骨架项目,内置了一些常用的组件及相关配置的文件及结构,是一个可以快速用于业务开发的 Web 项目基础,在安装时,您可根据您自身的需求,对组件依赖进行选择。
执行下面的命令可以于当前所在位置创建一个 skeleton 项目

基于 Swoole 驱动:

composer create-project hyperf/hyperf-skeleton

基于 Swow 驱动:

composer create-project hyperf/swow-skeleton

安装过程中,对于自己不清楚的选项,请直接使用回车处理,避免因自动添加了部分监听器,但又没有正确配置时,导致服务无法启动的问题。

Docker 下开发

假设您的本机环境并不能达到 Hyperf 的环境要求,或对于环境配置不是那么熟悉,那么您可以通过以下方法来运行及开发 Hyperf 项目:

启动容器

可以根据实际情况,映射到宿主机对应的目录,以下以 /workspace/skeleton 为例

如果 docker 启动时开启了 selinux-enabled 选项,容器内访问宿主机资源就会受限,所以启动容器时可以增加 —privileged -u root 选项

  1. docker run --name hyperf \
  2. -v /workspace/skeleton:/data/project \
  3. -p 9501:9501 -it \
  4. --privileged -u root \
  5. --entrypoint /bin/sh \
  6. hyperf/hyperf:8.0-alpine-v3.15-swoole

查看php版本:

php -v

  1. bash-5.1# php -v
  2. PHP 8.0.25 (cli) (built: Oct 26 2022 12:04:58) ( NTS )
  3. Copyright (c) The PHP Group
  4. Zend Engine v4.0.25, Copyright (c) Zend Technologies
  5. with Zend OPcache v8.0.25, Copyright (c), by Zend Technologies
  6. bash-5.1#

查看swoole版本:

php -i

  1. swoole
  2. Swoole => enabled
  3. Author => Swoole Team <team@swoole.com>
  4. Version => 5.0.3

创建项目

  1. cd /data/project
  2. composer create-project hyperf/hyperf-skeleton

项目代码目录结构:

  1. hyperf-skeleton/
  2. ├── Dockerfile
  3. ├── LICENSE
  4. ├── README.md
  5. ├── app
  6. ├── Controller
  7. ├── Exception
  8. ├── Listener
  9. └── Model
  10. ├── bin
  11. └── hyperf.php
  12. ├── composer.json
  13. ├── composer.lock
  14. ├── config
  15. ├── autoload
  16. ├── config.php
  17. ├── container.php
  18. └── routes.php
  19. ├── deploy.test.yml
  20. ├── phpstan.neon
  21. ├── phpunit.xml
  22. ├── runtime
  23. ├── test
  24. ├── Cases
  25. ├── HttpTestCase.php
  26. └── bootstrap.php
  27. └── vendor
  28. ├── autoload.php
  29. ...

启动项目

  1. cd hyperf-skeleton
  2. php bin/hyperf.php start

控制台输出:

  1. bash-5.1# php bin/hyperf.php start
  2. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener.
  3. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler listener.
  4. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener listener.
  5. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.
  6. [DEBUG] Event Hyperf\Framework\Event\BeforeMainServerStart handled by Hyperf\Process\Listener\BootProcessListener listener.
  7. [DEBUG] Event Hyperf\Framework\Event\OnManagerStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener.
  8. [DEBUG] Event Hyperf\Framework\Event\OnStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener.
  9. [INFO] Worker#0 started.
  10. [INFO] HTTP Server listening at 0.0.0.0:9501

测试

访问http://ip:9501

接下来,就可以在宿主机 /workspace/skeleton/hyperf-skeleton 中看到您安装好的代码了。 由于 Hyperf 是持久化的 CLI 框架,当您修改完您的代码后,通过 CTRL + C 终止当前启动的进程实例,并重新执行 php bin/hyperf.php start 启动命令即可。

后台进程启动服务器

nohup php hyperf.php start &

存在兼容性问题的扩展

由于 Hyperf 基于 Swoole 协程实现,而 Swoole 4 带来的协程功能是 PHP 前所未有的,所以与不少扩展都仍存在兼容性的问题。
以下扩展(包括但不限于)都会造成一定的兼容性问题,不能与之共用或共存:

  • xhprof
  • xdebug (当 PHP 版本 >= 8.1 且 Swoole 版本大于等于 5.0.2 时可用)
  • blackfire
  • trace
  • uopz