可以同时运行多个PHP脚本吗?

问题描述 投票:1回答:5

我正在使用Flash和PHP构建基于回合的多人游戏。有时,两个用户可能会同时调用同一PHP脚本。该脚本旨在将一些信息写入数据库。但是,如果该信息已由其他用户编写,则该脚本不应运行,否则游戏将中断。如果PHP按顺序处理这些脚本(类似于MySQL如何对多个查询进行排队),则总共应该只运行一个脚本,并且一切都应该很好。

但是,我发现大约有10%的时间都执行了两个用户的脚本。我的理论是服务器有时会同时接收两个用户请求,以同时运行脚本,而这两个服务器都运行,因为都没有检测到任何内容已写入数据库。是否可以同时执行两个脚本?如果是这样,该问题的可能解决方案是什么。

php mysql game-development
5个回答
2
投票

这确实是可能的。您可以尝试在脚本的开头和结尾处锁定和解锁表。

尽管这会使某些请求变慢,因为它们必须首先等待锁定的表被解锁。


1
投票

没关系,无论是PHP,C还是Java。同时,您只能具有CPU(和内核)的最大数量的进程。如果您只有2个核心,那么可以同时运行100个进程。只有2个正在运行,其余正在等待。现在,这取决于您在

run

下看到的内容。如果您将其视为活动状态,或者也正在等待过程。其次,它取决于您的系统配置,可以等待多少个进程以及您的系统规格。


0
投票
他们这样做很合理。查看database transactions

0
投票
这是您可以使用的SQL表锁定示例,以便第一个首先抢占数据库的PHP线程将锁定该表(使用锁名“ awesome_lock_row”),直到最终释放该表为止。第二个线程尝试使用相同的表,并且由于锁名也是“ awesome_lock_row”),因此它将一直等待,直到第一个PHP线程解锁了该表。

0
投票
声音,乍看之下,就像保持脚本的第二个实例滚动一样,只是在10%的时间内发生得不够快……我知道您已经有了某种“锁”,就像有人告诉您要补充,这很棒。如上所述,请始终将此锁放在脚本中,即使在调用脚本之前也不要(在父脚本中也称为a)。竞争功能/对象等也是如此...
© www.soinside.com 2019 - 2024. All rights reserved.