有一种方法可以每40毫秒执行一次php脚本吗? 我不知道cronjob是否正确,因为每秒25次需要大量的CPU。
好吧,如果php不是正确的语言,我应该使用哪种语言?
我正在制作一款在线游戏,但我需要一些东西来处理游戏中发生的事情,移动角色,计算射弹路径等。
答案 0 :(得分:13)
如果您尝试每40毫秒调用一次PHP脚本,则会涉及:
将工作放入循环体中会更好,然后在循环结束时使用time_sleep_until
来完成剩下的40毫秒。然后运行一次PHP程序。
请记住,这需要是一个独立的PHP程序;从网页中运行它会导致Web服务器在该页面上超时,然后过早地结束脚本。
答案 1 :(得分:6)
每40毫秒会令人印象深刻。它不适合cron
,它在1分钟的边界上运行。
也许如果您解释了为什么需要这种性能水平,我们可以提出更好的建议。
你必须要理解的另一件事是在UNIX下创建进程需要时间 - 这可能更适合于一次启动的长时间运行任务,并且每40ms只执行一次所需的活动。
更新:对于具有这种性能的在线游戏,我认为你真的需要考虑在桌面上运行胖客户端。
我的意思是编译为机器语言的语言(不解释),并且大部分代码在客户端上运行,仅使用网络传输需要共享的信息。< / p>
我不怀疑解释型语言适合性能较低的游戏,但我不认为,从个人经验来看,你可以为此目的而逃脱它们。
答案 2 :(得分:5)
PHP是一种缓慢的解释语言。因为它打开一个文件需要几乎这么长的时间。每40毫秒执行一次PHP脚本会导致一个庞大的队列,并且很快就会崩溃。这个肯定听起来像是一个你不想使用PHP的任务,而是一个守护进程或其他快速编译的二进制文件。你想做什么?
答案 3 :(得分:1)
据我所知,cronjob只能每分钟执行一次。这是可能的最短时间。我想知道为什么你需要这么少的执行时间?
答案 4 :(得分:0)
如果你真的希望它是PHP,我想你应该让这个过程继续运行一个shell,就像某种守护进程一样,而不是一直打开/关闭它。
我不知道该怎么做,但我想你至少可以从这篇文章中获得灵感:
http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/
答案 5 :(得分:0)
正如其他人所说的那样,每40毫秒开始一个新的过程并不是一个好主意。知道你想要做什么会很有趣。如果由于某种原因执行一次超过40毫秒,你想做什么?如果你现在小心,你可能会让许多进程同时踩到彼此的脚趾。
哪种语言在很大程度上取决于您尝试做什么,但您应该选择一种支持线程的语言,这样您就不必一直分叉新进程。 Java,Python可能适合。
答案 6 :(得分:0)
如果后端工作必须处理数据库查询等问题,我不太确定每个40 MS都是现实的。你可能会更好地设法一种适应系统条件的方法,并尝试 hard 每秒运行N次,而不是每40次MS就像发条一样。同样,这取决于你需要在幕后完成的复杂性。
PHP可能不是最好的语言。这有几个原因:
根据PHP的版本,可能会破坏垃圾回收。如果您守护进程,则存在每秒N次泄漏内存的风险。
this answer中详述的其他原因。
尝试使用C或Python并跟踪每次迭代需要多长时间。这使您可以“尽最大努力”每秒运行N次,或每40次运行,以较大者为准。这样可以避免您的进程永久运行,因为每次完成时,它都已经很晚才开始运行。
同样,我不确定这些任务应该在“最坏情况”场景系统负载上花多长时间。所以我的答案可能适用也可能不适用。无论如何,我建议你不要在PHP中编写一个独立的守护进程。
答案 7 :(得分:0)
PHP是这项工作的错误语言。如果您想在浏览器中快速更新,则需要使用Javascript。 PHP仅用于后端,这意味着PHP必须从服务器发送到浏览器然后再渲染。