次の 3 つの PHP スクリプトによってクエリされている、多くのゲーム オブジェクトを含むデータベースがあります。
- リスト オブジェクト:必要なすべてのアイテムを含む JSON オブジェクトを取得します
- オブジェクトの追加:データベースにオブジェクトを追加します
- リセット:テーブルからすべてのオブジェクトを消去します
3つすべてがある程度機能します。ただし、タイミングのミスマッチがあります。ゲームがリセット関数を呼び出すと、ゲームが再起動します。ゲームが再起動すると、すべてのオブジェクトが自動的に読み込まれます。残念ながら、ここに問題があります。ゲームがリセットされたばかりの場合、オブジェクトはスクリプト 1 によって引き続きプルされます。
私はトランザクションを知っていますが、それらを使用したことがなく、ここでそれらをどのように実装するかわかりません。私のトランザクションは、異なる時間に実行される異なるスクリプトからのものを含んでいるためです。
おまけとして: このセットアップ (AS3 > php > MySQL) では負荷が高いと問題が発生しますか? このゲームは 10 人、100 人、1000 人に取り上げられる可能性がありますが、その件について私が読めるものはありますか?
編集:新しいアイデア/質問
現在、ワイプは次のように機能します。オブジェクト テーブルには、reset メソッドが呼び出されると「1」に設定される「deleted」フィールドがあります。既存のデータをアーカイブ テーブルにコピーしてから、ライブ テーブルを切り捨てる方が賢明かもしれません...
編集:これが私が使用している(関連する)PHPコードです
オブジェクトを追加:
if ($db_found) {
$x = $_GET['x'];
$y = $_GET['y'];
$type = $_GET['type'];
$name = $_GET['name'];
$text = $_GET['text'];
$SQL = "INSERT INTO bodies (x,y,type,name,text)
VALUES ('".$x."','".$y."','".$type."','".$name."','".$text."' )";
if (!mysql_query($SQL))
{
die('Error: ' . mysql_error());
}
};
mysql_close($db_handle);
オブジェクトのリスト/取得:
if ($db_found) {
$SQL = "SELECT * FROM bodies WHERE deleted = 0";
$res = mysql_query($SQL);
$rows = array();
while($r = mysql_fetch_assoc($res)) {
print $r['x'] . ','
. $r['y']
. ','
. $r['type']
. ','
. $r['name']
. ','
. $r['text']
. ';';
}
};
mysql_close($db_handle);
リセット: (EDIT 2)
mysql_query("LOCK TABLES bodies WRITE;");
$SQL = " DELETE FROM bodies";
if (!mysql_query($SQL))
{
die('Error: ' . mysql_error());
}
};
mysql_query("UNLOCK TABLES;");