2014-03-19 135 views
1

我正在开发一款多人游戏,我想通过数据库中的研究连接两个互不认识的玩家。所以我想这样做:SELECT是同步的还是异步的?

  • 想玩随机对手的玩家点击我的应用程序上的按钮。
  • 当按钮被按下时,我控制我的'randomPlayers'表中的数据库,如果有人玩
  • 如果没有播放器存储在表中我把昵称放在数据库中等待某人想玩
  • 如果相反,有人存储在数据库中我采取第一个昵称(按时间戳排序),我玩它。

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

+0

对不起,我没有很好地解释这个问题..我改变我的问题 –

+0

我已经改变了你的标题,以反映您的真正的问题,以及标签。 – Prix

+0

谢谢你..你说得对 –

回答

1

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

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

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

而且考虑MySQL concurrency

+0

当然,我使用3层。我的应用程序通过WebService与通过MySql数据库读写的PHP页面进行通信,然后从Web服务接收我的应用程序回复。在这种情况下,我该怎么做? –

+0

因为PHP并没有真正执行多线程(两个数据库请求不应该同时运行),所以将多个SQL语句放入事务中就足够了。像这样的伪sql: START TRANSACTION; SELECT Player; 更新播放器; - 或删除?你比我更了解你的桌子。 COMMIT; –

+0

但是,如果PHP不是多线程的,那么当很多用户同时请求相同的东西时,数据库没有很慢的答案的危险? –

相关问题