![]() |
1
1
所以最终看来,我并不是唯一一个有这个问题的人。Gearman的谷歌小组中也没有人能找到解决方案。因此,最终我编写了自己的代码(从Gearman Monitor中提取部分),以确定哪些作业服务器已经启动并运行,哪些没有。
$gHosts类是一个配置类,它保存了我的每个潜在Gearman作业服务器的IP和端口。我在$gHosts中遍历每个潜在的作业服务器并对其进行测试。 然后,我将输出写入memcache和一个文本文件。在我开始真正尝试加载机器之前,内存缓存本身工作得很好。然后memcache连接将重复失败。现在我使用文本文件作为备份,问题已经消失了。 我将最后一次连接到每个Gearman作业服务器的尝试存储在一个数组中,其中键是服务器的名称,值是最后一次尝试的时间戳。如果尝试成功,则时间戳为正。如果尝试失败,则时间戳为负数。时间戳使我能够确定数据是陈旧的还是新鲜的。 然后,在使用Gearman的脚本中,我有一个围绕PHP扩展类的Client和Worker包装类。它们在我想要的时间范围内自动更新连接。这样,停止响应的Gearman作业服务器就会停止使用,脚本虽然可能在短时间内运行缓慢,但通常运行速度相当快。 希望这能帮助到其他人。 |