Skip to content

A event-driven multiple processes framework for php

License

Notifications You must be signed in to change notification settings

WALL-EEEEEEE/Twig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Twig

    Twig is a distributed framework, which designed for high performance application development. It is just an analogue like swoole, workerman, zanphp.

Introduction

    Twig is derived from Pider--A distributed, multi-processes spider framework. It facilitates Pider's distribution and muli-process features.

Requirements

  • php7.1(or above)
  • pcntl
  • posix
  • sockets

Usage

    First and all, autoload.php file under src directory need to be included to solve all dependencies.

MultiProcess

<?php
include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;

$process_manager = new Processd();

//10 process is crafted
for($i = 0; $i < 10; $i++) {
    $process = new Process(function() {
        echo "child process 1".PHP_EOL;
        sleep(5);
    });
    $process_manager->add($process);
}

$process_manager->run();

Customize process name

    By default, Master process and Child process will be populated by default predefined name in Twig. Master process claims as twig(master) by default, Child process is twig(child-pid) predefined (pid is process id owned to child process ). However, you can customiz your name in program.

<?php

include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;

$process_manager = new Processd('ProcessManager'); //Define name of master process

//create 10 process
for($i = 0; $i < 10; $i++) {
    $process = new Process(function() {
        echo "child process 1".PHP_EOL;
        sleep(5);
    },'Child'.$i); //Define name of child processes
    $process_manager->add($process);
}

$process_manager->run();

     If you want to display your defined name with child pid, pid placehold can faciliate.

include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;

$process_manager = new Processd('ProcessManager'); //Define name of master process

//create 10 process
for($i = 0; $i < 10; $i++) {
    $process = new Process(function() {
        echo "child process 1".PHP_EOL;
        sleep(5);
    },'Child'.$i.'[pid]'); //Define name of child processes
    $process_manager->add($process);
}

$process_manager->run();

Note:

You can debug it by using ps or top("c" to switch to command name display).

Daemon process

     Twig also supplies a eaiser way to create daemon processes.

<?php

include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;

$process_manager = new Processd('ProcessManager',true); //true set daemon process mode, vice verse

//create 10 process
for($i = 0; $i < 10; $i++) {
    $process = new Process(function() {
        echo "child process 1".PHP_EOL;
        sleep(5);
    },'Child'.$i); //Define name of child processes
    $process_manager->add($process);
}

$process_manager->run();

IPC with shared memory

     Twig just support simple IPC method now.Shared Memory is the only way available current.

  • Data from parent
<?php

include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;
use Twig\Process\Shared;
$process_manager = new Processd('ProcessManager'); 
$process_manager->share(new Shared(['what\'s','your','name'])); // share data in parent process

//create 10 process
for($i = 0; $i < 10; $i++) {
    $process = new Process(function($process) use($i) {
        echo "child process $i".PHP_EOL;
        //get shared data
        $shared_data = $process->shared();
        var_dump($shared_data);
        sleep(5);
    },'Child'.$i); 
    $process_manager->add($process);
}

$process_manager->run();
  • Data from childs
<?php

include(dirname(__DIR__).'/src/autoload.php');

use Twig\Process\Processd;
use Twig\Process\Process;
use Twig\Process\Shared;
$process_manager = new Processd('ProcessManager'); 
$process_manager->share(new Shared(['what\'s','your','name'])); // share data in parent process

//create 10 process
for($i = 0; $i < 10; $i++) {
    $process = new Process(function($process) use($i) {
        echo "child process $i".PHP_EOL;
        //get shared data
        $shared_data = $process->shared();
        $process->feedback(new Shared(['I am child '.$i]));//Emit data from childs
        sleep(5);
    },'Child'.$i); 
    $process_manager->add($process);
}

$process_manager->run();
var_dump($process_manager->feedbacks()); //Received data from childs

Contribution

    If you have any ideas, please emit an issue or post a pull request.

About

A event-driven multiple processes framework for php

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages