Hyperf框架快速入门指南:构建高性能HTTP服务

Hyperf框架快速入门指南:构建高性能HTTP服务

hyperf 🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease. hyperf 项目地址: https://gitcode.com/gh_mirrors/hy/hyperf

前言

Hyperf是一款基于Swoole扩展的高性能PHP协程框架,专为微服务和中间件开发设计。本文将带您快速了解如何使用Hyperf构建一个基础的HTTP服务,涵盖路由定义、控制器编写、依赖注入等核心功能。

环境准备

在开始之前,请确保您已经:

  1. 安装了PHP 8.0或更高版本
  2. 安装了Swoole扩展(推荐4.5+版本)
  3. 通过Composer创建了Hyperf项目

路由系统详解

Hyperf提供了灵活的路由定义方式,支持配置文件和注解两种形式。

配置文件定义路由

config/routes.php中,您可以使用Router类定义路由:

use Hyperf\HttpServer\Router\Router;

// GET请求示例
Router::get('/user', 'App\Controller\UserController::index');

// POST请求示例
Router::post('/user/create', 'App\Controller\UserController::create');

// 多方法请求示例
Router::addRoute(['GET', 'POST'], '/user/update', 'App\Controller\UserController::update');

注解定义路由

Hyperf的注解路由提供了更直观的定义方式,主要有两种风格:

1. AutoController注解

适合快速开发场景,自动为控制器所有public方法创建路由:

use Hyperf\HttpServer\Annotation\AutoController;

#[AutoController]
class UserController
{
    // 自动生成 /user/index 路由
    public function index()
    {
        return 'User List';
    }
}
2. Controller+RequestMapping注解

提供更精细的控制:

use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;

#[Controller(prefix: "/api/user")]
class UserController
{
    #[GetMapping(path: "list")]
    public function list()
    {
        return 'User List';
    }
}

快捷注解包括:@GetMapping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping等。

控制器开发实践

控制器是处理HTTP请求的核心组件,Hyperf支持多种开发模式:

基础控制器示例

use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\AutoController;

#[AutoController]
class UserController
{
    public function info(RequestInterface $request)
    {
        $userId = $request->input('id', 0);
        // 业务逻辑处理...
        return ['user_id' => $userId];
    }
}

请求对象

Hyperf提供了RequestInterface接口来访问请求数据,常用方法包括:

  • input() - 获取输入参数
  • query() - 获取查询参数
  • post() - 获取POST参数
  • cookie() - 获取Cookie
  • file() - 获取上传文件

依赖注入机制

Hyperf的依赖注入系统是其核心特性之一,提供了两种注入方式:

构造函数注入

use App\Service\UserService;

class UserController
{
    private UserService $userService;
    
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }
}

属性注入

use Hyperf\Di\Annotation\Inject;
use App\Service\UserService;

class UserController
{
    #[Inject]
    private UserService $userService;
}

依赖注入的优势在于:

  1. 解耦组件依赖
  2. 便于单元测试
  3. 简化对象管理
  4. 支持依赖替换

服务启动与管理

启动服务

在项目根目录执行:

php bin/hyperf.php start

服务热重载

由于Hyperf是常驻内存的CLI应用,代码修改后需要重启服务:

  1. 停止服务:Ctrl+C
  2. 重新启动:php bin/hyperf.php start

对于开发环境,可以考虑使用社区提供的热重载组件。

高级特性:多端口监听

Hyperf支持监听多个端口,配置示例:

// config/autoload/server.php
return [
    'servers' => [
        [
            'name' => 'http',
            'type' => Server::SERVER_HTTP,
            'port' => 9501,
            'callbacks' => [
                Event::ON_REQUEST => [\Hyperf\HttpServer\Server::class, 'onRequest'],
            ],
        ],
        [
            'name' => 'admin',
            'type' => Server::SERVER_HTTP,
            'port' => 9502,
            'callbacks' => [
                Event::ON_REQUEST => ['AdminHttp', 'onRequest'],
            ],
        ],
    ]
];

对应的路由需要指定server:

// 配置文件方式
Router::addServer('admin', function () {
    Router::get('/admin', 'App\Controller\AdminController@index');
});

// 注解方式
#[AutoController(server: "admin")]
class AdminController
{
    // ...
}

事件系统

Hyperf基于Swoole的事件驱动模型,支持多种服务器事件:

| 事件名 | 说明 | |--------|------| | ON_REQUEST | 收到HTTP请求时触发 | | ON_START | 服务器启动时触发 | | ON_WORKER_START | Worker进程启动时触发 | | ON_TASK | 任务投递时触发 | | ON_FINISH | 任务完成时触发 |

结语

通过本文,您已经了解了Hyperf框架的基础使用方式。Hyperf的强大之处不仅在于HTTP服务开发,它还提供了数据库连接池、RPC服务、消息队列、微服务治理等全套解决方案,适合构建高性能的分布式系统。

hyperf 🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease. hyperf 项目地址: https://gitcode.com/gh_mirrors/hy/hyperf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窦岑品

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值