如何让php脚本等待用户输入


How do I make a php script wait for user input

这是我的问题,对于那些看到标题并认为"PHP不等待用户输入,因为它是服务器端语言,因此您的问题是客户端语言"的人,请听我说完。

我正在做一个游戏。这是一个多人游戏,因此有多个用户。在每一轮游戏开始时,参与游戏的用户都会被提示选择他们想做的事情。当然,在每个人都选择了他们想做什么之前,这轮比赛不会开始。

看,这是我的问题。如何让脚本在继续执行之前等待"所有"用户发送请求(发送输入)?服务器端语言是PHP。答案不在客户端,因为客户端只对一个用户负责,不知道其他用户在做什么。

谢谢。

从根本上讲,您有两个选择:

选择一,你让每个脚本检查它是否拥有所需的所有数据,然后做所有的工作来计算下一步(或其他什么)。事实上,这比听起来要困难得多,因为您会遇到并发问题。

基本上,这种方法会导致不止一个"过程"——页面加载——试图在相同的数据上做相同的工作,这为你要么根本不做工作,要么做两次工作的竞争打开了大门。

第二种选择听起来更难,是编写另一个PHP脚本,检查它是否有所有的动作,计算结果,并在后台更新数据库(或其他任何东西)。

然后,从cron作业或类似的作业中运行它,这样一次只运行一个实例。这让生活变得更轻松:你的"一切都完成了吗"脚本只运行一次,所以你不必担心比赛——但从提交最后一步到计算结果之间可能会有一段时间的滞后。

从长远来看,这种方法实际上更容易,因为虽然它涉及更多的代码和更多的移动部件,但它实际上避免了一些棘手的问题(并发),以换取一些更容易的问题(使用cron的代码多一点)。

当然,你可以在这两个方面都有所改进,但这些都是基本模型。锁定和其他协调技术可以使"最后一页计算"更好地工作,但它们涉及到解决种族问题。

使用各种"后台作业"工具可以提高第二种方法的延迟,让您立即触发检查,而不仅仅是在计时器上。你仍然有一些延迟,但用户看不到太多

真的,不过,你可以从这两种策略中选择一种并采用它

(此外,我强烈建议,如果可以的话,获取一个框架或其他人已经解决了这些问题的东西,然后使用它。)

由于您无法将数据推送出去,我将按如下方式处理此问题:

  1. 在数据库中收集服务器上提交的信息
  2. 运行客户端脚本定期检查是否所有必需的信息都可用
  3. 在客户端上评估响应:如果为true,则开始游戏-如果不是"等待"=继续检查

所以你需要:

  • 服务器上收集信息的脚本
  • 检查所有信息是否可用的服务器脚本
  • 定期检查并评估的客户端脚本