chh/einhorn

此包最新版本(v0.4.0)没有可用的许可证信息。

用于与Einhorn父进程通信的库。

v0.4.0 2012-12-17 18:08 UTC

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_selectstream_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

特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的人免费处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许软件提供方使用软件,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是默示的,包括但不限于适销性、适用于特定目的和侵权免责等保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任源于合同行为、侵权行为或其他行为,无论这些责任与软件本身、软件的使用或其他与软件有关的交易有关。