如何让我的脚本不断检查变量?

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)。否则,当服务器不断发送内容时,您可能会陷入死循环。

【讨论】:

以上是关于如何让我的脚本不断检查变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 的条件语句中检查变量类型?

动态命名apple脚本变量

如何编写批处理脚本来检查文件夹内的多个文件夹和文件夹并将 csv 文件设置为变量?

如何让我的变量作为变量而不是对象的属性工作?

在 .sql 脚本中定义和使用变量

如何检查bash中的空环境变量[重复]