【问题标题】:Possibility of implementing node.js using PHP interpreter in place of JavaScript v8? [closed]使用 PHP 解释器代替 JavaScript v8 实现 node.js 的可能性? [关闭]
【发布时间】:2011-06-06 02:57:43
【问题描述】:

我有一个用 PHP 开发的命令行应用程序,目前使用文件和数据库内容进行输入。我需要更通用的互操作性,并且偶然发现了 Node.js。我发现它可以让我非常快速地创建一个 RESTful 或 SOAP 接口,可以在前端轻松扩展。

知道它是用 C 编写并使用 JavaScript V8 我想知道是否有人已经将任何想法用于执行 node.js 的并行实现,例如 node.php? PHP 开发人员将获得这个框架的奇妙之处,当然我可以通过对我当前的代码库进行有限的更改来立即利用。

这种实施的可行性、可行性和潜在挑战是什么? Node.js 中的 JavaScript 引擎有多根深蒂固,是否可以轻松替换为 PHP 引擎?

【问题讨论】:

  • PHP 作为很多阻塞标准 API。如果您使用单个阻塞 PHP 函数,您的整个 node.php 服务器将崩溃。在 PHP 中这样做没有任何优势
  • @Raynos:为什么会崩溃?我假设它只会阻塞被调用的函数?
  • @AlixAxel 崩溃是错误的词。它阻塞。如果节点阻塞,那将是一个巨大的瓶颈。它“破坏”了您的可伸缩性,它通过异步 IO “破坏”了可伸缩性的概念。
  • @Raynos:node.js 也会阻塞一些东西(比如requires),这似乎根本不是瓶颈。
  • @AlixAxel 那是因为所有的阻塞都是在http.createServer 之前完成的。当您不处理请求时,可以阻止。基本上你可以在启动时阻止,但是一旦你启动了 HTTP 服务器,你不能阻止。

标签: php rest soap node.js


【解决方案1】:

如果您感兴趣的只是在 PHP 中“非常快速地创建一个 RESTful 或 SOAP 接口”,那么您可能走错了方向。

与其寻找在 PHP 中重新实现 V8 + node.js,还有许多现有的 PHP 框架提供类似的抽象。请参阅:http://www.noupe.com/php/discussing-php-frameworks.html

【讨论】:

  • -1,据我所知,没有任何 PHP 框架具有类似 node.js 的功能。
  • 我相信我的问题没有错,因为我想了解可能阻止这种实现可能性的可能性和限制因素......顺便说一句,如果目前有类似的方法可以像 Node.js 一样扩展和执行,但利用 PHP 代码我也很高兴听到这些 :)
  • @Alix,也许你是对的,但这取决于你所说的“类似 node.js 的特性”是什么意思。我了解您来自哪里,但我只是建议 OP 似乎只想“非常快速地创建一个 RESTful 或 SOAP 接口”——许多 PHP 框架已经允许这样做。
  • @j_p 你的问题没有错 :) 如果你感兴趣的只是在 PHP 中接受 node.js 样式库的想法,那么请忽略我的回答。但是,PHP 确实允许您使用各种框架快速构建 Web 应用程序,以防您没有见过这些。
  • 对不起,我误解了你的观点,我推翻了我的投票。
【解决方案2】:

我也有过类似的想法,但我的结论不是最好的:

  • 在我的基准测试(简单循环)中,node.js 似乎比 PHP 快得多(+10 倍)
  • 可以实现基于 PHP 的 Web 服务器(并且 someprojectsalready 存在)
  • 默认情况下 PHP 不是非阻塞的(尽管它可以与 streamslibevent 之类的扩展一起使用)

我的结论是:如果您让 libevent 与文件句柄/流一起正常工作并编写一些围绕它的包装器,那么您可以拥有与 node.js 非常相似的东西,只是在性能方面不同。另外,还有一个重要的结论:当涉及到垃圾收集器时,PHP 并不是那么好,因此让 PHP 脚本作为 HTTP 守护程序永远运行可能不是一个好主意。

【讨论】:

  • 关于 GC,我会说 PHP 很烂,但是我已经解决了很多这些问题,因为我避免将内存释放到堆栈和回收,这对于保持 CPU 停机最重要(否则进程会花费很多时间要求操作系统分配)。
  • 我看到基准测试是双向的,但我相信只有在两者都发生事件和比较时才能比较性能,所以这听起来公平吗?我已经考虑了 libevent 的想法,并将沿着这些思路进行更多研究(为什么不同时考虑 Node.js 使用的 libev?)
  • 我对用 PHP 实现的 Web 服务器不是很感兴趣,而是对可以根据事件执行 PHP 的类似 Node 的服务器感兴趣。我认为 Node.js C 基本代码可以与 PHP 解释器一起使用。我还看到 Node 提供的许多扩展都是用 JS 编写的,所以这些类型的东西必须像我们一样移植。所以最大的问题是,如果事件问题得到解决,这是否可能和可行?
  • @j_p:我想是的,为什么不呢?性能当然会最差,但 PHP 性能应该会在未来的版本中变得更好。但我不太明白你的问题:你已经可以通过 CLI 或任何其他 SAPI 对 node.js 触发的事件执行 PHP。
  • @j_p 这是可行的,但“PHP 默认不是非阻塞的”。您必须重写 all 您的代码以实现非阻塞。您不能移植现有的 PHP 代码以在 node.PHP 上运行,这没有任何意义/收获。
【解决方案3】:

我看到的最大挑战是 node.js 使用基于事件的 v8 引擎架构,而 php 没有。

【讨论】:

  • PHP 也有 libevent 扩展。
【解决方案4】:

我没试过,你可以试试http://nanoweb.si.kz/

另外,其他人建议这将被内置到 php 中: https://wiki.php.net/rfc/builtinwebserver

【讨论】:

    【解决方案5】:

    PHP 已经自带了命令行解释器 (CLI),为什么还会有别的东西呢? Node.js 不能是别的东西,Javascript 不是 PHP;它们不共享相同的构造,它们不共享相同的范例,并且 Node.js 填补了在服务器端和客户端拥有 Javascript 的空白...... PHP 不存在这种空白。

    但是你指的是让 PHP 监听 HTTP 请求和所有,比如 Node.js?在这种情况下,它不会像 Node.js 那样工作得很好。您仍然可以找到一些项目,例如Arend 的答案所建议的,或者使用其他一些 PHP 类/框架来侦听 HTTP 连接并处理它们......但项目不会启动。国际海事组织。

    【讨论】:

    • 是的,它正在寻找一种在我的 PHP 进程之上实现 REST/SOAP 接口的最简单、最快捷的方法。我需要一个可以为我的后端服务器处理提供适当 WS 输入的 Web 规模架构。它是关于获得 Node.js 的易用性及其可扩展的性能,但利用了 PHP 语言。我尽量避免从 PHP 移植,但要以便宜的价格获得功能。
    • 我的目标是提供最简单、最具成本效益和可扩展的堆栈来部署我的逻辑。该应用程序在命令行中针对文件和数据库输入执行得非常好,并使用了许多可扩展的后端数据库选项。它的下一个发展是拥有一个类似于 Web 服务的界面,以便它可以轻松地集成到客户的工作流程中,而他们的代码工作量最少。因此,我正在寻找 Node.js 来实现利用我当前代码库的 RESTful 接口。我对上面的问题很感兴趣,但也对解决这个挑战的想法持开放态度:)
    • @j_p 你无法避免移植。您必须将 PHP 移植到非阻塞 PHP 或非阻塞 JS。这是一个巨大的变化。如果你不这样做,那么它将缩放。
    • @j_p,是什么让您认为您当前的 PHP 命令行应用程序仍将执行同样值得的 HTTP 请求?此外,为什么不只是拥有一个标准的 Apache+PHP+等。安装并以这种方式简单地“添加”一个值得请求的功能?因为您可以让 PHP 命令行应用程序与 Apache 在同一服务器上同时运行,并且只需使用各种方法同步两者(即。您所问的问题比使用真正满足您需求的解决方案。
    • @j_p,Raynos 是对的;如果尚未这样做,您将需要将您的 PHP 移植到非阻塞 PHP,因为只需等待来自客户端的传入连接将阻塞您的应用程序。为正确的工作使用正确的工具。 IMO,如果您想要一个良好的可扩展命令行 Web 堆栈,请查看 Play!框架。对于企业解决方案,对我而言,Java 比 PHP 更具可扩展性。
    【解决方案6】:

    感谢所有为这个主题做出深入贡献的人:)

    总结一下我对以上所有讨论的理解:

    1.) PHP 中缺乏事件驱动的行为使得在异步中利用它成为一个挑战。 Node.js 中使用的非阻塞 IO 模式

    2.) 如果可以在 PHP 中有效地支持事件,那么实现类似“Node.php”的行为不仅仅是对引擎的翻版和替换,因为大部分基本功能实际上是 JavaScript 编写的在C代码之上(如http、console、log、net stream等)

    3.) 缺乏一流的函数使得提供相同的语法和方法成为一项挑战。

    注意:我使用术语语法是因为我知道 PHP 中有一个回调语法,我认为可以使用它来代替一流的函数,但不会优雅地流动。

    4.) JavaScript v8 的性能特征被证明比 PHP 性能要好得多。

    再次感谢所有精彩的回复!我在原型设计时选择使用 PHP 纯粹是出于权宜之计和经济考虑。如果在项目开始时我已经放弃了 Node.js,我会从一开始就考虑 JS。当我现在从原型转向生产时,我必须决定移植到像 Node.js、纯 C++ 或像 Erlang 或 Scala 这样的东西。我面前还有很多问题和决定:P

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多