2011-01-26 43 views
2

我想不出一个更好的方式来标题,抱歉。如何让我的脚本不断检查一个变量?

我正在研究PHP IRC bot。目前,我正在使用一个while fgets(...循环来保持它监听数据和响应。

在我睡着的某个时候,它实际上“停止”并停止获取数据,没有任何可用于触发重新启动的错误消息。

我想到了一个快速解决方案,那就是存储服务器最后一次抓住机器人,如果超过x秒,重新连接。这个计划在理论上非常有用,除了这个ping检查是在fgets循环内完成的,所以它只在它从IRC服务器接收到数据时才进行检查。因此,如果它只是停止从服务器获取数据,它将不会比较ping时间,并且不会重新启动。

我想不出如何解决这个问题。帮帮我?

+0

我建议创建一个守护进程,以便在后台运行并等待消息:http://www.google.com/search?hl=zh-CN&safe=active&q=php+daemon+&aq=f&aqi=&aql=&oq= – 2011-01-26 16:00:27

+0

为什么不这样做'正确的方式',并用乒乓回应ping? (或任何其在IRC RFC中调用的) – Kevin 2011-01-26 16:01:08

回答

3

首先,使用stream_set_timeout()将(已打开的)套接字的超时设置为低于服务器ping超时的值。

然后修改循环条件为:while(fgets(...) || !$done) 当您没有得到答案时,fgets将超时,您可能必须为此禁止警告。但是,通过这种方式,您可以将某些内容发送到服务器,以便在发生ping超时之前它不会断开与您的连接。只要修改$ done标志并将其设置为true,当您确实要断开连接(但是您正在这样做)。

不知道这是否有效,但它可能值得一试。

附录:我在考虑退出条件,最好是手动退出while(使用break)而不是设置标志。所以你可以修改条件到​​。否则,当服务器不断发送内容时,您可能会陷入无限循环。

相关问题