在服务器端执行php操作

时间:2014-12-28 19:12:30

标签: php mysql ajax

我正在投射一些基于网络的游戏。基本上我想要执行这个架构:

  1. 玩家点击产品的补充库存
  2. 上面需要一段时间才能执行操作,例如1分30秒
  3. 玩家更改标签到产品列表并返回商店概述
  4. 一小时后,他返回产品页面并重新填充库存。
  5. 我不知道如何在用户点击一个按钮后在服务器端执行延迟的php动作。

    我知道我可以通过简单地创建另一个mysql表并收集播放器执行的任何操作并在产品页面上创建简单的jquery倒计时从sql查询得到的时间。

    但如果没有这张桌子怎么办?

    另外如何创建一些随机动作,例如我们为虚拟人销售产品,生成一些随机断电等等。甚至可以使用AJAX或JQuery吗?

    也许我应该使用一些cronjobs,例如我们的IPBoard one。

    从字面上看,我不知道从哪里开始。我知道可能我没有技能来创建更高级的网页游戏,但我只想尝试学习新的东西。

2 个答案:

答案 0 :(得分:0)

根据您的环境和服务器权限,实现此目的的一种方法是创建一个bash脚本并使用

调用bash脚本
exec('sh /path/to/file.sh')

来自您的php文件,例如包含在ajax调用中。

bash脚本可以包含类似

的内容
#!/bin/bash\
echo php /path/to/file.php | at now + 2 min # << or whatever time you want

答案 1 :(得分:0)

如果你不想要一个MySQL表,我冒昧猜测你不想设置Redis(虽然它超级简单! )您还希望获取PHPRedis(也可在GitHub上查看)查看their site以获取受支持客户端的完整列表。

Redis是一个简单的键值存储,它针对快速读/写操作进行了优化,并附带了一个方便的EXPIRE功能。它非常适合存储经常变化的小数据。通过设置在n秒后自行删除的标志,您只需检查该标志即可。如果该标志仍然存在,继续向用户显示&#34;正在进行中&#34;动作。

使用&#34; {$ user_id}的密钥:{$ property}&#34; ...

<?php
$time = 90;
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('1234:item1:stock_level', 100);
$redis->setex('1234:item1:restocking_flag', $time, 1);


if ($redis->get("{$user_id}:{$item}:restocking_flag")) {
    echo "Your stock will be refilled in {$redis->ttl()} seconds";
} else {
    echo "You now have {$redis->get("{$user_id}:{$item}:stock_level")} items";
}

当然,这是服务器端实现。您希望通过Ajax进行调用以启动重新填充过程。如果您知道所花费的时间,请让javascript计时器在(例如)90秒之后发出ajax请求,以便向服务器验证锁已被删除。否则,只需检查有意义。只要您的脚本没有从客户端的直接值设置Redis超时,这就可以防止在用户端进行驯服。