我正在开发一款多人游戏,我想通过数据库中的一项研究将两个互不认识的玩家联系起来。所以我想到了这样做:
- 想要与随机对手一起玩的玩家点击我的应用程序上的一个按钮。
- 当按下按钮时,我在“randomPlayers”表中的数据库中控制是否有人可以玩
- 如果没有玩家存储在表中我把昵称放在数据库中等待有人想玩
- 相反,如果有人存储在数据库中,我会使用第一个昵称(按时间戳排序)并使用它。
我的问题是:我如何确定在同一时刻搜索随机玩家的两个玩家选择了两个不同的玩家而不是相同的玩家,因为 SELECT 返回的是同一个玩家? 也就是说 SELECT 是同步的还是异步的?
最佳答案
我希望你做的是 3 层设计,而不是 2 层。例如。该程序是连接到连接到数据库(第 3 层)的中间服务器,还是该程序直接连接到数据库(第 2 层)?
如果是 2 层,您可能必须将选择包装在某种事务中以获取玩家并更新表格,这样第二个请求就不会获取同一个玩家。旁注,您可能需要考虑切换到 3 层设计,以便更好地管理用户可以和不能对您的数据库执行的操作。
如果是 3 层,您可以通过使用您用于在中间构建服务器的语言提供的某种锁定系统来避免这一切。大多数现代编程语言现在都提供了一些语法,允许您指定一次只能有一个线程运行一段给定的代码,从而允许您管理这些类型的并发问题。
还要在 MySQL concurrency 上考虑这个问题
关于php - SELECT 是同步的还是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505191/