语境 :
我正在制作一个 PHP websocket 服务器(这里)作为一个 DAEMON 运行,其中显然有一个主循环监听套接字连接和传入数据,所以我不能只创建另一个循环,sleep(x_number_of_seconds);
因为它会冻结我的整个服务器。
我无法使用 CRON 作业执行外部脚本或分叉一个新进程(我猜),因为我必须在我的服务器类的范围内才能将数据发送到连接的客户端套接字。
有谁知道在 PHP 中实现这一目标的魔术?:/
一些疯狂的想法:
- 用 跟踪最后一个循环执行时间
microtime(true)
,并将其与每个循环的当前时间进行比较,如果它大约是我想要的 X 秒间隔,请执行该方法......这将导致一个非常醉且不一致的间隔循环。 - 在浏览器中运行 JavaScript
setInterval()
,它将通过 websocket 与我的服务器通信并告诉它执行我的方法......我说他们在哪里疯狂的想法!
有关我要实现的目标的其他信息:
我正在制作一个小型在线游戏(类似 RPG),我想在其中添加一些 NPC,每 X 秒更新一次他们的行为。
还有其他方法可以实现这一目标吗?我错过了什么吗?我应该用 Node.js 重写我的服务器吗?
非常感谢您的帮助 !