我正在开发一款多人游戏,其中有一个类似于大厅的区域,玩家可以选择“扇区”进入。大厅网关由PHP驱动,而实际的游戏过程由一个或多个Java服务器处理。数据存储在MySQL中。
正常情况下,玩家选择一个扇区并告诉大厅他想进入。大厅会检查这是否可行,包括检查该扇区的分配表中是否有太多玩家(将该扇区的入口计数与其max_players值进行比较)。然后,玩家将被添加到扇区分配表中,与该扇区配对。玩家客户端会收到一个通行证,让他连接到适当的游戏服务器。
如果两个玩家几乎同时请求访问同一个扇区,我可以想象出这样一种情况:由于在他们的检查开始时只剩下一个空位,所以他们都被添加了,从而超过了最大玩家数。
最佳解决方案是在sector_assignments上锁定表吗?还有其他选项吗?
正常情况下,玩家选择一个扇区并告诉大厅他想进入。大厅会检查这是否可行,包括检查该扇区的分配表中是否有太多玩家(将该扇区的入口计数与其max_players值进行比较)。然后,玩家将被添加到扇区分配表中,与该扇区配对。玩家客户端会收到一个通行证,让他连接到适当的游戏服务器。
如果两个玩家几乎同时请求访问同一个扇区,我可以想象出这样一种情况:由于在他们的检查开始时只剩下一个空位,所以他们都被添加了,从而超过了最大玩家数。
最佳解决方案是在sector_assignments上锁定表吗?还有其他选项吗?