我正在开发一个多人游戏,我想把两个互不认识的玩家和数据库中的研究联系起来。所以我想这样做:
想要与随机对手玩的玩家点击我的应用程序上的一个按钮。
当按下按钮时,我控制“随机播放器”表中的数据库中是否有人可以玩
如果表中没有存储播放器,我会将昵称放入数据库,等待有人想玩
相反,如果有人存储在数据库中,我取第一个昵称(按时间戳排序)并使用它。
我的问题是:我如何确定在同一时刻搜索一个随机玩家的两个玩家使用了两个不同的玩家,而不是因为SELECT返回了同一个玩家?
换句话说,选择同步还是异步?

最佳答案

我希望你做的是3层设计,而不是2层。例如,程序是连接到中间连接到数据库(3层)的服务器,还是直接连接到数据库(2层)?
如果是两层的,则可能需要将select包装在某种事务中,该事务捕获播放器并更新表,以便第二个请求不会捕获同一个播放器。另外,您可能需要考虑切换到3层设计,以便更好地管理用户可以和不能对数据库执行的操作。
如果是3层,您可以通过使用在中间构建服务器的语言提供的某种锁定系统来避免这一切。现在,大多数现代编程语言都提供了一些语法,允许您指定一次只能有一个线程运行给定的代码,从而允许您管理这些类型的并发问题。
也可以在MySQL concurrency上考虑这个问题

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

10-11 10:52