chh/einhorn
用于与Einhorn父进程通信的库。
Requires
- php: >=5.3.6
This package is not auto-updated.
Last update: 2024-09-14 12:39:29 UTC
README
一个简单的工具带,用于使用PHP与Einhorn。
安装
将以下内容放入你的composer.json
{
"require": {
"chh/einhorn": "*@dev"
}
}
安装它
% php composer.phar install
然后设置自动加载器
<?php
require("vendor/autoload.php");
用法
与主进程通信
使用Einhorn\Client
与Einhorn主进程通信。获取客户端的最简单方法是通过工作进程的client
方法。
<?php use Einhorn\Worker; $client = Worker::client();
client
方法接受控制套接字的发现方法作为第一个参数,以及一个可选的第二个参数,该参数可以被特定的发现策略使用。
以下发现策略是默认支持的
DISCOVER_ENV
:查找名为EINHORN_SOCK_PATH
的环境变量,其中包含主控Unix套接字的路径。DISCOVER_FD
:查找名为EINHORN_FD
的环境变量,其中包含主控套接字的文件描述符编号。这主要用于与Einhorn的-b
开关一起使用。DISCOVER_DIRECT
:打开作为第二个参数传递的路径作为Unix套接字。当需要从工作脚本外部打开控制套接字进行监控等操作时很有用。
示例
<?php use Einhorn\Worker; $client = Worker::client(Worker::DISCOVER_FD); $client->ack();
客户端还提供了一个command
方法,可以向主进程发送任意命令。
Client::command(array $command)
command
参数是一个数组,其中至少包含一个包含要在主进程中调用的命令名称的command
键。
对于返回响应的命令,应在发送命令后调用recv
方法。
示例
<?php user Einhorn\Worker; $client = Worker::client(); $client->command(array("command" => "state")); $state = $client->recv();
手动ACK
如果使用-m manual
启动了einhorn
,客户端提供了一个ack
方法,该方法将包含当前进程PID的worker:ack
命令发送到Einhorn主进程。
示例
<?php use Einhorn\Worker; $client = Worker::client(); $client->ack();
文件描述符编号到PHP流
Worker
类提供了一个实用方法,该方法返回Einhorn传入的文件描述符编号的PHP流。然后可以使用stream_select
或stream_socket_accept
使用此流。
示例
<?php use Einhorn\Worker; # Returns the first socket found in `EINHORN_FDS` environment variable $socket = Worker::socket(); # Returns all sockets bound via the -b flag $sockets = Worker::sockets(); # When the FD number is passed by other means: $socket = Worker::socket($fd);
变更日志
v0.4.0
- 添加了
Worker::sockets()
,它返回一个数组,包含从EINHORN_FDS
中的所有文件描述符编号创建的流。 - 当将
-g
标志传递给Einhorn并使用DISCOVER_FD
策略查找控制进程时,请使用EINHORN_SOCK_FD
而不是EINHORN_FD
来发现控制套接字的文件描述符编号。
许可证
版权所有 (c) 2012 Christoph Hochstrasser
特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的人免费处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许软件提供方使用软件,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是默示的,包括但不限于适销性、适用于特定目的和侵权免责等保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任源于合同行为、侵权行为或其他行为,无论这些责任与软件本身、软件的使用或其他与软件有关的交易有关。