vatson/isolated-callback

允许在单独的进程中执行回调

1.0.1 2013-12-03 14:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:59:46 UTC


README

小巧但功能强大的工具,可以轻松进行分支。

隔离回调允许在分支中执行任何可调用语句,并避免内存泄漏。

安装

安装非常简单,多亏了Composer

composer require vatson/isolated-callback

或者将需求添加到您的composer.json文件中

{
    "require": {
        "vatson/isolated-callback": "*"
    }
}

并运行update

composer update vatson/isolated-callback

使用方法

快速简单。让我们创建一些生成大量数据但结果较小的匿名函数

<?php
include_once 'vendor/autoload.php';

use Vatson\Callback\IsolatedCallback;

$cb = function() {
    return array_slice(range(1, 100000), rand(1,100), rand(1,10));
};

$icb = new IsolatedCallback($cb);
$random_slice = $icb();

就是这样。您的回调将在单独的分支中运行,并将结果发送到主进程。

回调参数

注意,您可以使用参数调用它,并使用lambda函数绑定一些局部变量。

<?php
include_once 'vendor/autoload.php';

use Vatson\Callback\IsolatedCallback;

$slice_length = rand(1,5);
$cb = function($max_range) use($slice_length) {
    return array_slice(range(1, $max_range), rand(1,$max_range), $slice_length);
};

$icb = new IsolatedCallback($cb);
$random_slice = $icb(1000);

对象作为结果

您还可以发送不仅仅是标量,还可以发送简单的对象(POPO)。记住,基于或包含Resources的对象不能作为结果序列化。

<?php

use Vatson\Callback\IsolatedCallback;

$cb = function() {
    $popo_object = new \stdClass();
    $popo_object->property = 'value';
    return $popo_object;
};

$icb = new IsolatedCallback($cb);
$property = $icb()->property;

限制

请注意,当前实现使用System V IPC在进程之间共享结果。传输的数据量取决于您的系统配置。最佳实践是发送简短而简洁的结果。

需求

  • PHP >= 5.3.2

  • 进程控制(《PCNTL》)- 允许进行分支

  • System V IPC(《semaphore》)- 添加了在分布式进程之间共享结果的能力

  • [可选] Fumocker - 模拟php的内置函数

  • [可选] PHPUnit 3.5+ 执行测试套件

作者

许可

Isolated Callback在MIT许可条款下分发 - 有关详细信息,请参阅LICENSE文件