【问题标题】:How to run Nodejs Server from PHP script?如何从 PHP 脚本运行 Nodejs 服务器?
【发布时间】:2019-06-12 02:18:16
【问题描述】:

我有一个 PHP 服务器,它是主要的应用程序。 我有一个 Nodejs 服务器,它是一个子应用程序。

Nodejs 服务器用于通知机制。我希望能够从我在 PHP 上运行的主应用程序中禁用通知机制。

有一个按钮。单击它后,我更改了 Nodejs 配置文件,现在我想重新启动 Nodejs 服务器。 我想我可以在 PHP 中做这样的事情:

exec("杀死sudo lsof -t -i:4849"); exec("node server.js");

潜在问题: 1)权限问题:我想这可以通过让我的apache用户拥有节点应用程序的所有权来解决。我对吗? 2)Exec:执行 exec 会导致我的浏览器继续加载。我做了 netstat 并发现 Nodejs 服务器正在运行。这是让我担心的问题。我想我需要做一些 fork 和 exec 方法,以便子进程(Nodejs)独立运行。

请帮忙。

解决方案:

    exec("fuser -k ". NODEAPPPORT ."/tcp > /dev/null 2>&1 &");
    exec('bash -c "exec nohup setsid node "'.NODEPATH.'/app.js" > 
    /dev/null 2>&1 &"');

我将标准输出和标准错误重定向到 /dev/null。 我将它作为一个独立的进程运行。它就像一个魅力。

【问题讨论】:

    标签: php node.js ubuntu exec chmod


    【解决方案1】:

    我的建议是: 不要。

    通过 Express 等框架或其他方式将 Node 服务器作为独立服务器运行。然后,您可以通过专用网络公开您的 Node 应用程序的端点(这将是 IMO 最简单的解决方案)和/或在您的 PHP 应用程序和您的 Node 应用程序之间使用简单的授权机制。然后,您可以通过那个简单的 API 端点启动/停止通知系统,而不是每次都杀死/重新启动您的 Node 应用程序。假设它在启动时因任何原因而崩溃,您将无法判断它已从您的 PHP 应用程序中关闭。

    我不知道您的通知应用程序究竟是如何工作的,但我猜它正在处理某种流,您可以轻松关闭它而不会杀死整个 Node 服务器。

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多