代码之家  ›  专栏  ›  技术社区  ›  user216441

每隔40毫秒执行一次PHP脚本?

  •  3
  • user216441  · 技术社区  · 15 年前

    有什么方法可以每隔40毫秒执行一个PHP脚本? 我不知道cronjob是否是正确的方法,因为每秒25次需要大量的CPU。

    如果PHP不是正确的语言,我应该使用什么语言?

    我正在制作一个在线游戏,但是我需要一些东西来处理游戏中发生的事情,移动角色,计算投射路径等。

    8 回复  |  直到 15 年前
        1
  •  13
  •   Craig Trader    15 年前

    如果您尝试每40毫秒调用一个PHP脚本,这将涉及:

    • 创建流程
    • 加载PHP
    • 加载并编译脚本
    • 运行已编译的脚本
    • 删除进程和所有内存

    你最好把你的工作放在循环体中,然后用 time_sleep_until 在循环结束时完成剩下的40毫秒。然后运行一次PHP程序。

    请记住,这需要是一个独立的PHP程序;从网页中运行它将导致Web服务器在该网页上超时,然后过早结束脚本。

        2
  •  6
  •   paxdiablo    15 年前

    每40毫秒 给人留下深刻印象。它不太适合 cron 以1分钟为界。

    也许如果你解释了为什么你需要这种水平的性能,我们可以提出一些更好的建议。

    您必须了解的另一件事是,在Unix下创建进程需要时间——这可能更适合于长时间运行的任务,该任务只启动一次,每40毫秒执行一次所需的活动。

    更新: 对于具有这种性能的在线游戏,我认为您需要认真考虑在桌面上运行胖客户端。

    我的意思是编译成机器语言的语言( 解释)以及当大部分代码运行在客户端上时,仅将网络用于传输需要共享的信息。

    我不怀疑解释语言是否适用于性能较低的游戏,但我认为,从个人经验来看,您不可能因此而摆脱这些语言。

        3
  •  5
  •   Pekka    15 年前

    PHP是一种缓慢的解释语言。打开一个文件几乎要花那么多时间。每40毫秒执行一个PHP脚本将导致一个巨大的队列,并很快崩溃。这个 一定地 听起来像是一个任务,你不想使用php,但一个守护进程或其他快速,编译的二进制文件。你想干什么?

        4
  •  1
  •   TheGrandWazoo    15 年前

    据我所知,cronjob只能每分钟执行一次。这是最短的时间。我想知道你为什么需要这么短的执行时间?

        5
  •  0
  •   phidah    15 年前

    如果你真的想让它成为PHP,我想你应该让这个进程像某种教义一样通过一个shell运行,而不是一直打开/关闭它。

    我不知道怎么做,但我想你至少可以从这篇文章中得到一些启发:

    http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

        6
  •  0
  •   Kimble    15 年前

    正如其他人所说,每40毫秒启动一个新流程听起来不是个好主意。知道你想做什么是很有趣的。如果出于某种原因执行一次超过40毫秒,您希望做什么?如果你现在小心的话,你可能会有很多进程同时在彼此的脚趾上运行。

    什么语言将很大程度上取决于您试图做什么,但是您应该选择一种具有线程支持的语言,这样您就不必一直分叉一个新的进程。Java,Python可能是合适的。

        7
  •  0
  •   Community Dunja Lalic    7 年前

    如果后端工作必须处理数据库查询之类的事情,我不太确定每40毫秒是否真实。你可能会更好地找到一种适应系统条件的方法并尝试 坚硬的 每秒运行N次,而不是像时钟一样每40毫秒运行一次。同样,这取决于你需要在幕后完成什么的复杂性。

    PHP可能不是最好的编写语言。这有几个原因:

    • 根据PHP的版本,垃圾收集可能会被破坏。如果进行后台监控,则可能每秒泄漏内存n次。

    • 其他原因详见 this answer .

    尝试使用c或python并跟踪每个迭代需要多长时间。这可以让你“尽最大努力”每秒运行N次,或者每40毫秒运行一次,以较大者为准。这就避免了您的进程一直在运行,因为每次结束时,重新开始都已经晚了。

    同样,我不确定这些任务在“最坏情况”场景系统负载上应该承担多长时间。所以我的答案可能适用,也可能不适用。无论如何,我建议您不要用PHP编写独立的守护进程。

        8
  •  0
  •   Brendan Long    15 年前

    PHP是此作业的错误语言。如果您想在浏览器中进行如此快速的更新,您需要使用javascript。php仅用于后端,这意味着php所做的一切都必须从服务器发送到浏览器,然后进行呈现。