如何让我的脚本不断检查变量?
Posted
技术标签:
【中文标题】如何让我的脚本不断检查变量?【英文标题】:How to make my script continuously check a variable? 【发布时间】:2011-01-26 15:55:09 【问题描述】:我正在开发一个 php IRC 机器人。目前我正在使用while fgets(...
循环来保持它监听数据并响应。
在我睡着的某个时候,它实际上“ping out”并停止获取数据,没有任何可以用来触发重启的错误消息。
我想到了一个快速的解决方案,那就是存储服务器上次 ping 机器人的时间,如果超过 x 秒,则重新连接。这个计划在理论上很有效,除了这个 ping 检查是在 while fgets 循环内完成的,所以它只在从 IRC 服务器接收数据时检查它。因此,如果它只是停止从服务器获取数据,它就不会比较 ping 时间,也不会重新启动。
我想不出如何解决这个问题。
【问题讨论】:
我建议创建一个只在后台运行并等待消息的守护进程:google.com/… 为什么不以“正确的方式”进行操作并用乒乓球回应 ping? (或 IRC RFC 中的任何名称) Kevin,我确实回复了一个 Pong,但是如果没有收到 ping 怎么办? :) 【参考方案1】:首先,使用stream_set_timeout() 将(已打开的)套接字的超时设置为低于服务器 ping 超时的值。
然后将循环条件修改为:while(fgets(...) || !$done)
当您没有得到答案时, fgets 将超时,您可能必须为此取消警告。但是,通过这种方式,您可以向服务器发送一些内容,这样它就不会在您获得 ping 超时之前断开您的连接。只需修改 $done 标志并将其设置为 true,当您真正想要断开连接时(无论如何您正在这样做)。
不确定这是否有效,但可能值得一试。
附录:我在考虑退出条件,最好手动退出while
(使用break
)而不是设置标志。所以你可以将条件修改为while(fgets(...) || 1)
。否则,当服务器不断发送内容时,您可能会陷入死循环。
【讨论】:
以上是关于如何让我的脚本不断检查变量?的主要内容,如果未能解决你的问题,请参考以下文章