我正在投射一些基于网络的游戏。基本上我想要执行这个架构:
我不知道如何在用户点击一个按钮后在服务器端执行延迟的php动作。
我知道我可以通过简单地创建另一个mysql表并收集播放器执行的任何操作并在产品页面上创建简单的jquery倒计时从sql查询得到的时间。
但如果没有这张桌子怎么办?
另外如何创建一些随机动作,例如我们为虚拟人销售产品,生成一些随机断电等等。甚至可以使用AJAX或JQuery吗?
也许我应该使用一些cronjobs,例如我们的IPBoard one。
从字面上看,我不知道从哪里开始。我知道可能我没有技能来创建更高级的网页游戏,但我只想尝试学习新的东西。
答案 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超时,这就可以防止在用户端进行驯服。