还有其他一些关于并发性的问题,但它们并不能完全解决我的情况。
因此,假设我有一个游戏,用户之间的互动,打架和诸如此类的。在任何给定的时间,玩家都可能参与到与其他玩家的多个交互中,他们都可以看到事件的发生。当其中任何一位玩家访问该站点时,它需要更新所涉及的任何数据,并向用户展示这一点。
例子:玩家A正在和B玩家战斗,在这场战斗中每隔几分钟就会发生一次事件。同时,玩家A也在与玩家C互动,运气不好,两种互动的事件恰好发生在同一秒钟。
当那一秒到来的时候,幸运的是,玩家B和玩家C同时访问这个站点,为了检查他们与玩家A的战斗状态,战斗需要更新关于玩家A的信息,如果我不正确地编码,A的数据可能会被弄乱。
对于这种情况,我有两场比赛,每一场都有不同的解决方案和不同的问题。其中之一使用锁,因此当用户访问站点时,他们在db行上获取一个锁,读取他们成功获得的锁的数据,然后编写更改并释放锁。但有时,由于未知的原因,这一失败和锁永远卡住,用户抱怨,我们必须手动修复它。我的另一个游戏使用守护进程来执行这些事务,使问题(几乎)没有意义,因为只有一个进程进行这些更改。但是玩家仍然可以同时做其他的事情,并且有可能导致同样的问题。
我读过一些关于这方面的不同解决方案的文章,比如乐观或基于时间戳的控制。我想问:
发布于 2010-11-09 15:52:50
我认为你正在寻找的东西已经包含在你的问题:交易。如果使用的是MySQL,则需要使用innoDb引擎设置表,以便能够使用事务。一些文件:
如果可能的话,不要试图重新发明轮子。
https://stackoverflow.com/questions/4135475
复制相似问题