Hyperf框架快速入门指南:构建高性能HTTP服务
前言
Hyperf是一款基于Swoole扩展的高性能PHP协程框架,专为微服务和中间件开发设计。本文将带您快速了解如何使用Hyperf构建一个基础的HTTP服务,涵盖路由定义、控制器编写、依赖注入等核心功能。
环境准备
在开始之前,请确保您已经:
- 安装了PHP 8.0或更高版本
- 安装了Swoole扩展(推荐4.5+版本)
- 通过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()
- 获取Cookiefile()
- 获取上传文件
依赖注入机制
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;
}
依赖注入的优势在于:
- 解耦组件依赖
- 便于单元测试
- 简化对象管理
- 支持依赖替换
服务启动与管理
启动服务
在项目根目录执行:
php bin/hyperf.php start
服务热重载
由于Hyperf是常驻内存的CLI应用,代码修改后需要重启服务:
- 停止服务:Ctrl+C
- 重新启动:
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服务、消息队列、微服务治理等全套解决方案,适合构建高性能的分布式系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考