2014-12-28 36 views
0

即時投影某些基於Web的遊戲。 Basicially我想執行這個模式:在服務器端執行一個PHP動作

  1. 玩家點擊產品的補充庫存
  2. 有一些人需要上面執行操作的時間,例如1分30秒
  3. 球員的變化選項卡產品清單並返回到店概覽
  4. 一小時後,他回到產品頁面,股票重新填充。

我不知道如何在用戶點擊一個按鈕後在服務器端執行延遲的php動作。

我知道我可以通過簡單地創建另一個MySQL表做到這一點,那裏聚集的玩家進行任何行動,並在產品頁面簡單的jQuery倒計時創建時間從SQL查詢中獲得。

但如何做,沒有這個表?

而且如何創建這樣我們的虛擬人銷售產品的一些隨機的行動,產生一些隨機的拉閘限電等它甚至有可能與AJAX或JQuery的?

也許我應該使用一些cronjobs這樣我們IPBoard一個人的。

從字面上看,我不知道從哪裏開始。我知道可能我沒有技能來創建一些更高級的網頁遊戲,但我只是想嘗試和學習新的東西。實現這一

+0

表是一個很好的方法來做到這一點。 – Jasen

+0

但是如何產生隨機動作呢?我可以使用cronjobs嗎? – GamaPL

+0

只有及時:當用戶會看到結果假裝行爲按時完成,或者使用cron或某種類型的隊列管理器來執行任務。 – Jasen

回答

0

的一種方式,取決於您的環境和權限的服務器上,將只創建一個bash腳本,並呼籲與

exec('sh /path/to/file.sh') 

從你的PHP文件中的bash腳本,例如包裹在一個ajax調用。

的bash腳本可以包含類似

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

如果你不想要一個MySQL表,我想冒昧地猜測,你不會想建立Redis要麼(這是超級簡單,雖然!)您還需要獲取PHPRedis(也可在GitHub上查詢)查看their site以獲取受支持客戶端的完整列表。

Redis的是對快速讀/寫操作優化的一個簡單的key-value存儲,並帶有一個方便EXPIRE功能。存儲頻繁變化的小數據是很好的選擇。通過設置一個在n秒後自我刪除的標誌,您可以檢查該標誌。如果標誌仍然存在,請繼續向用戶顯示「進行中」操作。

隨着 「{$ user_id的} {$}財產」 的關鍵...

<?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進行調用,以啓動重新填充過程。如果您知道所花費的時間,請在(例如)90秒之後讓javascript定時器發出ajax請求,以向服務器驗證該鎖已被刪除。否則,只要經常檢查是否合理。這樣可以防止在用戶端進行馴服,只要您的腳本沒有將Redis超時設置爲直接的客戶端值即可。