lifespikes / php-node
从PHP中启动和管理Node实例
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.5
- symfony/var-dumper: 6.1.x-dev
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 }); })();