我从这个问题开始: Gearman:客户端请求和工作人员接收之间的 3 秒。这是正常的吗?
环境:
- Ubuntu 12.04 桌面
- PHP 5.3.10
- Gearman(带有 PHP 扩展 1.1.1 的 libgearman 1.1.5)
- 局域网上的多台服务器
我无法获得少于 3 秒的工作人员响应时间,我不知道为什么。我将其缩小到我构建的包装类。然后,我将其进一步缩小到类中的特定方法。长话短说,真正的问题似乎在于 PHP 扩展中 GearmanWorker 的 addServer 方法。
我的包装类试图连接到 3 个 Gearman 作业服务器。实际上只有 2 个正在运行。当我尝试连接到所有 3 个时,我收到关于第 3 个无法连接的警告。我还得到了 3 秒的工作人员响应时间。当我删除添加服务器的尝试时,当前关闭的作业服务器然后瞧,工作人员响应时间约为 0.003 秒。
现在您可能会问,为什么不直接从要连接的服务器列表中删除关闭的服务器?好吧,首先它不会总是失败。其次,当当前启动或 5 分钟前启动的服务器之一不再运行时会发生什么?Wham 所有作业现在至少需要 3 秒。现在我认为可能有一种方法可以将超时配置为 1 秒,但更好的解决方案 IMO 是有一种方法可以从工作人员试图从中获取工作的服务器列表中删除死服务器。
在我的研究中有一个 addServer 方法。还有一个 addFunction 方法。然后有一个取消注册方法可以从给定工作人员的列表中删除工作人员功能。但是,我看不到 removeServer 方法。
那么,有没有办法在 GearmanWorker 中剔除作业服务器列表,或者我是否需要杀死对象,重新实例化它,然后重新连接到新的、剔除的可用作业服务器列表?杀死并重新启动 GearmanWorker 似乎远非理想。
什么是扫描(并连接到)所有活动作业服务器的最佳方法,同时避免已死的作业服务器固有的超时?
谢谢