2

我正在尝试通过 PHP 脚本连接到 beanstalkd 服务器并从现有队列中保留作业。我正在使用 fgets() 函数从守护进程获取响应,希望脚本挂起,除非有工作可用,这是一个示例代码:

set_time_limit(0);
$connection = fsockopen('localhost', 11300);
fwrite($connection, "reserve\r\n");
stream_set_blocking($connection, TRUE);
fgets($connection);

如您所见,我试图强制 fgets() 函数阻塞,并且我将 max_execution_time 设置为 0(意味着没有限制),但过了一会儿(2 分钟)脚本返回没有错误。我试图通过 telnet 运行 reserve 命令,但它按预期挂起。我也尝试使用 fread() 但我得到了相同的行为。

关于如何解决它的任何建议?

4

3 回答 3

1

尝试使用stream_set_timeout()

于 2009-08-10T15:23:10.697 回答
0

守护程序可能会在 2 分钟后输出行尾字符。您是否尝试过检查空白字符串并将其循环回来?

于 2010-03-08T14:30:04.253 回答
0

您是否在 php.ini 中设置了值?您是否通过 phpinfo() 确认了它的正确值?如果您以编程方式设置它,那么您将无法正常工作,参见。http://us.php.net/manual/en/function.set-time-limit.php

当 PHP 在安全模式下运行时,此功能无效。除了关闭安全模式或更改 php.ini 中的时间限制之外,没有其他解决方法。

于 2009-08-10T15:25:52.613 回答