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

标签 php irc ping

我正在开发 PHP IRC 机器人。目前我正在使用while fgets(...循环以使其监听数据并响应。

在我睡着的某个时刻,它实际上“ping出去”并停止获取数据,没有任何类型的错误消息可以用来触发重新启动。

我想到了一个快速解决方案,那就是存储服务器上次 ping 机器人的时间,如果超过 x 秒,则重新连接。这个计划在理论上工作得很好,除了这个 ping 检查是在 while fgets 循环内完成的,所以它只在从 IRC 服务器接收到数据时才检查它。因此,如果它只是停止从服务器获取数据,它不会比较 ping 时间,也不会重新启动。

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

最佳答案

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

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

不确定这是否有效,但可能值得一试。

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

关于php - 如何让我的脚本不断检查变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4806638/

相关文章:

windows-xp - 禁用 Windows 响应 ping 请求的能力

php - Codeigniter 和 PHPWord

php - 如何漂亮地打印已删除源元素的 XSLT 结果文档?

haskell - 在 Haskell 中处理惰性输入 channel 的惯用方法是什么

node.js - 是否可以让 IRC 客户端使用 websockets 运行您自己的 IRC 服务器而无需 websockets 网关?

command-line - 如何在批处理文件中检查 ping 是否响应

php - 如何将具有相同索引和值的 2 个数组与 php 组合?

php - 将值从 angularjs 转移到 php

java - 简单的 Java IRC 客户端

Linux ping广播开关