本文目录导读:

在 PHP 中实现常驻进程(长驻内存)的框架和方案,主要有以下几种主流选择:
Swoole 框架(最推荐)
Swoole 是 PHP 最成熟的异步/协程框架,专门为常驻进程设计。
基础使用示例:
// server.php
use Swoole\Http\Server;
$server = new Server("0.0.0.0", 9501);
$server->on("start", function (Server $server) {
echo "Swoole HTTP Server is started\n";
});
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello Swoole\n");
});
$server->start();
进程模型:
$server->set([
'worker_num' => 4, // 工作进程数
'daemonize' => false, // 是否守护进程化
'max_request' => 10000, // 每个进程最大请求数
'log_file' => '/tmp/swoole.log',
'pid_file' => '/tmp/server.pid',
]);
Workerman 框架
Workerman 是纯 PHP 实现的常驻进程框架,不需要扩展。
基本用法:
// server.php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$httpWorker = new Worker("http://0.0.0.0:2345");
$httpWorker->count = 4; // 进程数
$httpWorker->onMessage = function($connection, $data) {
$connection->send("Hello World");
};
Worker::runAll();
定时器使用:
use Workerman\Timer;
$worker = new Worker('text://0.0.0.0:2345');
$worker->onWorkerStart = function ($worker) {
// 每10秒执行一次
Timer::add(10, function () use ($worker) {
echo "定时任务执行\n";
});
};
ReactPHP 框架
ReactPHP 是基于事件驱动的异步框架,用于构建单进程异步应用。
基本使用:
<?php
require __DIR__ . '/vendor/autoload.php';
use React\EventLoop\Factory;
use React\Http\Server as HttpServer;
use React\Http\Message\Response;
use Psr\Http\Message\ServerRequestInterface;
$loop = Factory::create();
$server = new HttpServer($loop, function (ServerRequestInterface $request) {
return new Response(
200,
['Content-Type' => 'text/plain'],
"Hello ReactPHP\n"
);
});
$socket = new React\Socket\Server('0.0.0.0:8080', $loop);
$server->listen($socket);
$loop->run();
AMPHP 框架
AMPHP 是基于协程的异步框架。
<?php
require __DIR__ . '/vendor/autoload.php';
use Amp\Loop;
use Amp\Http\Server\HttpServer;
use Amp\Http\Server\Request;
use Amp\Http\Server\Response;
use Amp\Socket\Server;
Loop::run(function () {
$socket = yield Server::listen('0.0.0.0:8080');
$server = new HttpServer($socket, function (Request $request) {
return new Response(200, [], "Hello AMPHP");
});
yield $server->start();
});
传统方式 + pcntl 扩展
使用 PHP 自带的 pcntl 扩展实现进程管理。
<?php
// daemon.php
declare(ticks = 1);
class Daemon {
private $pidFile;
private $logFile;
public function __construct($pidFile, $logFile) {
$this->pidFile = $pidFile;
$this->logFile = $logFile;
}
public function start() {
// Fork 子进程
$pid = pcntl_fork();
if ($pid == -1) {
die("无法创建子进程");
} elseif ($pid) {
// 父进程退出
exit(0);
}
// 成为会话领导者
posix_setsid();
// fork,避免获取终端
$pid = pcntl_fork();
if ($pid == -1) {
die("无法创建子进程");
} elseif ($pid) {
exit(0);
}
// 写入 PID 文件
file_put_contents($this->pidFile, posix_getpid());
// 重定向标准输入输出
$log = fopen($this->logFile, 'a');
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
// 主循环
while (true) {
// 处理业务逻辑
$this->process();
sleep(5);
}
}
private function process() {
file_put_contents($this->logFile, date('Y-m-d H:i:s') . " 执行任务\n", FILE_APPEND);
}
}
// 使用
$daemon = new Daemon('/tmp/app.pid', '/tmp/app.log');
$daemon->start();
Hyperf 框架
Hyperf 是基于 Swoole 的全功能框架。
// config/server.php
return [
'mode' => SWOOLE_PROCESS,
'servers' => [
[
'name' => 'http',
'type' => Style::SERVER_HTTP,
'host' => '0.0.0.0',
'port' => 9501,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Event::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
],
],
],
'settings' => [
'worker_num' => 4,
'max_request' => 10000,
'daemonize' => 0,
],
];
选择建议
| 需求场景 | 推荐方案 |
|---|---|
| 高并发 HTTP API | Swoole / Hyperf |
| 简单常驻进程 | Workerman |
| 纯 PHP 无扩展 | Workerman / ReactPHP |
| 协程异步 | Swoole / AMPHP |
| 微服务 | Hyperf |
进程管理最佳实践
// 进程退避重启策略
$server->set([
'max_request' => 10000, // 防止内存泄漏
'reload_async' => true, // 异步安全重启
'task_worker_num' => 8, // 异步任务进程
'dispatch_mode' => 2, // 分配模式
]);
选择合适的框架主要取决于你的具体需求:性能要求、是否允许安装扩展、开发效率等因素,Swoole 是目前最推荐的方案,性能和功能最全面。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播