Php 从源代码重新编译以包含setInterval功能?

Php 从源代码重新编译以包含setInterval功能?,php,Php,我手头有一个非常麻烦的问题。我使用的是在PHP中运行的web套接字服务器。问题是我需要能够在php套接字服务器中使用类似于JavaScript的setInterval/setTimeout函数。 我没有时间或资源将整个项目转换为nodejs/javascript。这要花很长时间。我非常喜欢php,所以我不想切换。其他一切都很好,我觉得重新编写所有内容是不值得的,因为我无法在php中使用类似的setInterval函数。 由于php套接字服务器在shell中运行,因此我可以使用一个循环使用se

我手头有一个非常麻烦的问题。我使用的是在PHP中运行的web套接字服务器。问题是我需要能够在php套接字服务器中使用类似于JavaScript的setInterval/setTimeout函数。

我没有时间或资源将整个项目转换为nodejs/javascript。这要花很长时间。我非常喜欢php,所以我不想切换。其他一切都很好,我觉得重新编写所有内容是不值得的,因为我无法在php中使用类似的setInterval函数。

由于php套接字服务器在shell中运行,因此我可以使用一个循环使用setInterval类型的函数:

这段代码确实按照预期的方式工作,但对于资源来说似乎有点过火,我觉得虽然循环会消耗很多资源

我是否可以从源代码处重新编译PHP,并包含一个“while2”循环,该循环仅每500毫秒迭代一次,而不是立即迭代

  • 我认为没有办法从源代码重新编译PHP

  • 如果要延迟循环的执行,可以使用用于延迟执行的
    sleep
    函数

  • 例如,我想每2秒打印10个数字,然后下面的代码就可以完成这项工作

    for($i=0;$i<=10;$i++)
    {
         print($i++);
         sleep(2);
    }
    

    for($i=0;$iI)会想象这会涉及到某种程度的问题。@NiCk我删除了我的答案,我厌倦了人们投票否决它;我认为他们不太理解这个问题(或者我真的对神奇的php做的事情没有兴趣)。您是否在php中使用了一个特殊的库,使其在睡眠时不会阻止所有人?您最初的问题给我的印象是,您正在用php编写服务器。要使websocket服务器连接与客户端保持联系,连接将打开,并且永远不会关闭。这意味着如果您在外部运行php文件对于Web服务器,每一个sleep()都会阻止整个脚本的运行。(这还假设了一个明显的事实,即shell_exec和passthru之类的东西被避免了,因为它们是巨大的安全风险)。我仍然坚持我最初的结论——如果你想要一个“服务”这是一个软件,请花点时间至少研究一种语言,它是用来响应这样的请求的。虽然我喜欢PHP有很多很多用途,但它从来就不是用来做这个的。有很多关于表达这种情感的技术谈话。嘿,帕特里克。很好,我尊重你的回答,这对我有帮助。我很难过你删除了但是无论如何,我已经完成了80%的将我的游戏服务器重新写入NODEJS!:)我将错过我的php套接字服务器,但是我真的需要setInterval和setTimeout函数。我可以保存php套接字服务器以供以后使用。(它主要用作带有单独频道的聊天服务器等)。别担心,Patrick,我仍然全心全意地爱PHP,仍然在游戏主网站上使用它,但游戏服务器将不得不使用javascript/nodejs。是的,睡眠功能不适用于我的项目:(.因为它会停止整个脚本。如果我有多个用户在服务器上攻击一个怪物,其他玩家会遇到瓶颈。谢谢=]。嗯…我真的不想移动到nodejs并重新编写所有内容哈哈。(尤其是使用setInterval!)我明白你的意思。如果你想让用户有自己的运行时间,你可以使用线程。那么,这是一个很好的开始?一旦我有了线程,你是说睡眠功能将是特定于用户的吗?(这样不会使其他人访问该脚本时遇到瓶颈?)@NiCkNewman我建议您查看Patrick Webster发布的答案。他关于线程对实际生产环境有害的说法是正确的。请查看关于Gearman框架的链接。