【发布时间】: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 怎么办? :)