在phpEnv集成环境中使用Gearman,可以方便地把邮件发送、视频转码等耗时操作从Web请求中剥离出来,交给独立的worker节点处理,从而实现简单的分布式任务分发。下面按步骤说明如何安装与配置。

一、环境准备与Gearman服务端安装
phpEnv自带PHP多版本切换,先确认使用的PHP版本(如7.4)。Gearman包含job server(gearmand)和PHP扩展两部分。Windows下可下载编译好的gearmand,启动后即可监听4730端口。
1. 启动gearmand服务
将gearmand放到本地目录,命令行执行:
# 启动Gearman服务端,监听默认端口 gearmand.exe --daemon --listen=127.0.0.1 --port=4730
2. 在phpEnv中开启Gearman扩展
打开phpEnv的PHP扩展管理,勾选php_gearman。若列表没有,需下载对应PHP版本的php_gearman.dll放入ext目录,并在php.ini添加extension=gearman。
二、编写Client与Worker脚本
Client负责提交任务,Worker负责消费。以下为PHP示例,注意代码中的HTML特殊字符已转义。
Worker脚本(worker.php)
<?php
// 创建worker实例并连接本地job server
$worker = new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
// 注册任务名reverse,并定义处理函数
$worker->addFunction('reverse', function($job) {
$data = $job->workload();
return strrev($data);
});
// 循环等待任务
while ($worker->work()) {
if ($worker->returnCode() != GEARMAN_SUCCESS) {
echo "错误码: " . $worker->returnCode() . "n";
break;
}
}
Client脚本(client.php)
<?php
$client = new GearmanClient();
$client->addServer('127.0.0.1', 4730);
// 同步提交任务
$result = $client->doNormal('reverse', 'hello phpenv');
echo "返回结果: " . $result . "n";
// 异步后台任务
$client->doBackground('reverse', 'async task');
三、配置分布式任务分发
真正的分布式只需让多台机器上的worker连接同一个job server,或在client中配置多个server实现高可用。修改连接地址即可:
- worker和client的addServer()填远端gearmand地址,如192.168.0.1
- 可调用addServer多次添加多个节点,client会轮询分发
- job server本身也可做集群,但需配合第三方工具
| 角色 | 部署位置 | 说明 |
|---|---|---|
| gearmand | 中心服务器 | 统一接收与派发任务 |
| worker | 多台业务机 | 实际执行任务逻辑 |
| client | Web机 | 提交用户侧任务 |
四、运行与验证
先启动gearmand,再命令行运行php worker.php,另开窗口执行php client.php。若输出反转字符串,说明phpEnv下的Gearman分布式配置已生效。后续可将worker注册为系统服务,实现稳定后台处理。