lifespikes/php-node

从PHP中启动和管理Node实例

1.0.0 2022-03-14 13:32 UTC

This package is auto-updated.

Last update: 2024-09-04 08:45:24 UTC


README

一个简单的库,用于从PHP执行短暂的NodeJS进程。

嗨,Packagist :) https://packagist.com/orgs/lifespikes/packages/3021975

这是为谁准备的?

每种语言和平台都有自己的优缺点,对于我们来说,JavaScript的一个最大的优点是能够在几分钟内迅速编写程序。

这个包是为那些想要在PHP应用程序中集成Node编写的微服务的开发者准备的,它提供了一个简单、面向对象的库。

这一切都是为了进程管理器吗?

PHP Node是我们构建的一个库,以利用我们团队中不同成员擅长多种语言及其出色生态系统的力量。自然地,我们希望这些集成尽可能无缝,但我们也不想让任何东西比必需的更复杂。

我们不会为每个服务实现单独的API,比如说使用Express的SOAP或REST接口,或者将这些服务作为Docker容器部署,PHP Node帮助我们

  • 使用简单的单行语法执行脚本
  • 缓解错误报告中的断开连接
  • 快速部署新的微服务,设置简单
  • 通过断言FinishedProcess属性来测试集成
  • 不使用参数发送和接收信息
  • 轻松确定错误原因、退出状态和其他详细信息

示例

使用PHP Node非常简单。

第一步是确保您的机器上安装了NodeJS。您运行的是哪个版本取决于您。然后,请确保Node的路径存在于您的PATH中,或者将其设置为NODE_BINARY环境变量。

现在请确保您的脚本可以通过您的Web服务器或PHP进程所有者访问。

最后,请确保通过使用stdin而不是argv来接收输入,以便在脚本上期待输入。我们选择了使用流路径,以便我们可以广播可靠且更大的数据块。

(这个库在这方面非常棒:https://npmjs.net.cn/package/get-stdin)

然后,只需运行它。在这个例子中,我们使用一个微服务来截图一个网站

<?php

namespace LifeSpikes\PHPNode\Engine;

use \scripts_path;

/* You can add arguments to the script if needed */
$script = Engine::spawn(scripts_path('screenshot.js'));

/* Use "with" to send data before executing */
$result = $script->with([
    'url'   =>  'https://google.com'
]);

printf(
    "Job ID: %s, Exit Code: %d", 
    $result->output['job_id'], 
    $result->status()
);

/* If not sending any data, you can use ->run() */

为了上下文,我们将编写另一个小型的伪脚本

import screenshot from 'web-browser-lib';
import getStdin from 'get-stdin';
import {stdout} from 'process';

const stdout = (json) => stdout.write(
  JSON.stringify(json)
);

(async () => {
  const input = JSON.parse(await getStdin());
  const job = await screenshot(input.url);
  
  /* console.log would have the same result */
  stdout({
    job_id: job.id
  });
})();