有没有更有效的方式来更新JSON文件?

时间:2019-06-25 12:26:52

标签: php json

我正在开发基于浏览器的游戏,对于战斗实例,我需要能够跟踪玩家的生命值以及NPC的生命值。我认为为每个实例设置一个JSON文件比让mySQL db不断处理请求更具意义。我设法创建了JSON文件,提取了内容,更新了相关的变量,然后覆盖了文件,但是我想知道是否有比我设置方法更有效的处理方法。

$new_data = array(
    "id"=>"$id",
    "master_id"=>"$master_id",
    "leader"=>"$leader",
    "group"=>"$group",
    "ship_1"=>"$ship_1",
    "ship_2"=>"$ship_2",
    "ship_3"=>"$ship_3",
    "date_start"=>"$date_start",
    "date_end"=>"$date_end",
    "public_private"=>"$public_private",
    "passcode"=>"$passcode",
    "npc_1"=>"$npc_1",
    "npc_1_armor"=>"$npc_1_armor",
    "npc_1_shields"=>"$npc_1_shields",
    "npc_2"=>"$npc_2",
    "npc_2_armor"=>"$npc_2_armor",
    "npc_2_shields"=>"$npc_2_shields",
    "npc_3"=>"$npc_3",
    "npc_3_armor"=>"$npc_3_armor",
    "npc_3_shields"=>"$npc_3_shields",
    "npc_4"=>"$npc_4",
    "npc_4_armor"=>"$npc_4_armor",
    "npc_4_shields"=>"$npc_4_shields",
    "npc_5"=>"$npc_5",
    "npc_5_armor"=>"$npc_5_armor",
    "npc_5_shields"=>"$npc_5_shields",
    "ship_turn"=>"$ship_turn",
    "status"=>"$status");

$new_data = json_encode($new_data);
$file = "$id.json";
file_put_contents($file, $new_data);

它可以工作,但是我想知道是否有一种方法来更新单个数组项,而不必提取所有数据,将其分配给vars,然后重新写入文件。在此示例中,我仅更改了一个变量(ship_turn)

2 个答案:

答案 0 :(得分:0)

  

我认为为每个实例设置一个JSON文件比让mySQL数据库不断处理请求更为有意义。

MySQL为此任务进行了优化。

如果您使用文件(如JSON)代替数据库,则必须处理“竞争条件”,因为文件访问未针对并发读写访问进行优化(默认情况下)。

如果您处于高并发环境中,则应避免将文件系统用作“数据库”。在PHP上很难使文件系统上的多种操作变得原子化。

有关更多详细信息,请参见flock

答案 1 :(得分:0)

这取决于游戏。对于基于回合的游戏或任何非实时游戏,应该使用MySQL方法。毕竟,数据库的设计目的是要严厉打击:-)对于实时游戏,我会选择WebSocketNodeJS作为后端。服务器将保持游戏的运行状态,对客户端请求做出适当反应并处理比赛条件(就像在独立的多人服务器上所做的一样)