PHP高性能API开发:基于Swoole的HTTP服务实战指南
1. Swoole HTTP服务基础
创建基本HTTP服务器:
<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);
$http->on("start", function ($server) {
echo "Swoole HTTP服务器已启动n";
});
$http->on("request", function ($request, $response) {
$response->header("Content-Type", "application/json");
$response->end(json_encode([
'message' => 'Hello World',
'method' => $request->server['request_method'],
'uri' => $request->server['request_uri']
]));
});
$http->start();
2. 协程MySQL客户端
实现高性能数据库查询:
<?php
$http->on("request", function ($request, $response) {
$db = new SwooleCoroutineMySQL();
$db->connect([
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'password' => '',
'database' => 'test'
]);
$result = $db->query('SELECT * FROM users WHERE id = ' . (int)$request->get['id']);
$response->end(json_encode($result));
});
3. RESTful API实战
构建用户管理API:
<?php
$http->on("request", function ($request, $response) {
$path = $request->server['request_uri'];
$method = $request->server['request_method'];
// 路由处理
if ($method === 'GET' && preg_match('#^/users/(d+)$#', $path, $matches)) {
$userId = $matches[1];
// 获取用户逻辑...
}
elseif ($method === 'POST' && $path === '/users') {
$data = json_decode($request->rawContent(), true);
// 创建用户逻辑...
}
$response->header("Content-Type", "application/json");
$response->end(json_encode($result));
});
4. 中间件实现
添加身份验证中间件:
<?php
function authMiddleware($request) {
if (!$request->header['authorization']) {
return ['error' => '未授权'];
}
// JWT验证逻辑...
return true;
}
$http->on("request", function ($request, $response) {
$authResult = authMiddleware($request);
if ($authResult !== true) {
$response->status(401);
$response->end(json_encode($authResult));
return;
}
// 业务逻辑...
});
技术 | 传统PHP-FPM | Swoole |
---|---|---|
并发能力 | 100-200请求/秒 | 5000+请求/秒 |
内存占用 | 高(每个请求) | 低(常驻内存) |
适用场景 | 传统Web应用 | API/微服务 |
5. 性能优化技巧
提升Swoole服务性能:
<?php
$http->set([
'worker_num' => swoole_cpu_num() * 2,
'enable_coroutine' => true,
'max_request' => 10000,
'document_root' => '/path/to/static',
'enable_static_handler' => true
]);
// 连接池配置
SwooleRuntime::enableCoroutine();
$pool = new SwooleConnectionPool(
function() {
return new SwooleCoroutineMySQL();
},
100
);
通过合理使用Swoole,PHP应用的性能可以提升10-50倍,特别适合高并发的API服务和微服务架构。