php - SELECT 是同步的还是异步的?

标签 php mysql select concurrency

我正在开发一款多人游戏,我想通过数据库中的一项研究将两个互不认识的玩家联系起来。所以我想到了这样做:

  • 想要与随机对手一起玩的玩家点击我的应用程序上的一个按钮。
  • 当按下按钮时,我在“randomPlayers”表中的数据库中控制是否有人可以玩
  • 如果没有玩家存储在表中我把昵称放在数据库中等待有人想玩
  • 相反,如果有人存储在数据库中,我会使用第一个昵称(按时间戳排序)并使用它。

我的问题是:我如何确定在同一时刻搜索随机玩家的两个玩家选择了两个不同的玩家而不是相同的玩家,因为 SELECT 返回的是同一个玩家? 也就是说 SELECT 是同步的还是异步的?

最佳答案

我希望你做的是 3 层设计,而不是 2 层。例如。该程序是连接到连接到数据库(第 3 层)的中间服务器,还是该程序直接连接到数据库(第 2 层)?

如果是 2 层,您可能必须将选择包装在某种事务中以获取玩家并更新表格,这样第二个请求就不会获取同一个玩家。旁注,您可能需要考虑切换到 3 层设计,以便更好地管理用户可以和不能对您的数据库执行的操作。

如果是 3 层,您可以通过使用您用于在中间构建服务器的语言提供的某种锁定系统来避免这一切。大多数现代编程语言现在都提供了一些语法,允许您指定一次只能有一个线程运行一段给定的代码,从而允许您管理这些类型的并发问题。

还要在 MySQL concurrency 上考虑这个问题

关于php - SELECT 是同步的还是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505191/

相关文章:

php - 使用 jQuery 禁用特定的文本字段

php - MySql 查询正在对表中的每条记录执行

php - mySQL 按 MONTH 选择一列

javascript - 获取字符串,但不是从下拉列表选项中选择的值

php - 将查询传递给使用第二个数据库的 module_hook

javascript - 隐藏发帖按钮是否是防止用户未经许可发帖的有效方法?

mysql - 检查数据库中两个表之间的数据差异

jquery - 触发点击选择元素

php - 使用 Laravel 避免重复输入约束冲突

mysql - MySql触发器语法错误: While_Sym