Coder Social home page Coder Social logo

worker's Introduction

Hoa


Build status Code coverage Packagist License

Hoa is a modular, extensible and structured set of PHP libraries.
Moreover, Hoa aims at being a bridge between industrial and research worlds.

Hoa\Worker

Help on IRC Help on Gitter Documentation Board

This library allows to create shared workers in order to lift out some heavy and blocking tasks.

Learn more.

Installation

With Composer, to include this library into your dependencies, you need to require hoa/worker:

$ composer require hoa/worker '~3.0'

For more installation procedures, please read the Source page.

Testing

Before running the test suites, the development dependencies must be installed:

$ composer install

Then, to run all the test suites:

$ vendor/bin/hoa test:run

For more information, please read the contributor guide.

Quick usage

As a quick overview, we see how to create a worker and how to communicate with it.

Create a worker

First, we need to register the worker (i.e. creating a .wid file), called demorker:

if (false === Hoa\Worker\Run::widExists('demorker')) {
    Hoa\Worker\Run::register('demorker', 'tcp://127.0.0.1:123456');
}

Then, we start the worker (with a password) and we listen to messages:

$worker = new Hoa\Worker\Backend\Shared('demorker', 'iamapassword');
$worker->on('message', function(Hoa\Event\Bucket $bucket) {
    $data = $bucket->getData();
    // compute $data['message'].
});
$worker->run();

The message indicates a task to do (sending an email, create some archives, update the database, send some notifications…).

We are also able to manage all workers from a CLI.

Communicate with a worker

Second, since the worker is running, we can communicate with it from our application. Thus:

$worker = new Hoa\Worker\Shared('demorker');
$worker->postMessage('mail [email protected] Hello Gordon!');

We are able to send everything that can be serialized.

Documentation

The hack book of Hoa\Worker contains detailed information about how to use this library and how it works.

To generate the documentation locally, execute the following commands:

$ composer require --dev hoa/devtools
$ vendor/bin/hoa devtools:documentation --open

More documentation can be found on the project's website: hoa-project.net.

Getting help

There are mainly two ways to get help:

Contribution

Do you want to contribute? Thanks! A detailed contributor guide explains everything you need to know.

License

Hoa is under the New BSD License (BSD-3-Clause). Please, see LICENSE for details.

worker's People

Contributors

hywan avatar metalaka avatar osaris avatar pierozi avatar shulard avatar stephpy avatar vonglasow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

worker's Issues

Shared::start | New argument

On Hoa\Worker\Backend\Shared::sart function
That will be great to add third argument for custom environment variable by FPM params

I can make PR for this if it's approved, because i have already done for my project...

return $server->send(array(
            'GATEWAY_INTERFACE' => 'FastCGI/1.0',
            'SERVER_PROTOCOL'   => 'HTTP/1.1',
            'REQUEST_METHOD'    => 'GET',
            'REQUEST_URI'       => $workerPath,
            'SCRIPT_FILENAME'   => $workerPath,
            'SCRIPT_NAME'       => DS . dirname($workerPath),
            'CUSTOM_VAR'        => 'foo bar baz'
        ));

Use Worker in a non full Hoa environment

Hello,

I'm currently working on a bot crawler project and I really need to implement a worker system to boost performances.

I try to use this lib in a test project but I get an issue with the "WID" storage path.

I try to update the default path with the code :

<?php
Hoa\Core\Core::getInstance()->setProtocol(
    'hoa://Data/Variable/Run',
    '/an/awesome/path'
);

It update the folder but maintain a predefined structure Variable/Run/....wid. Is there a way to define a totally specific folder to store the wid files ? Or is there a way to automatically generate the base structure folder to start working without problems ?

Thanks ;)

French doc improvement

It seems to have a small typo here :

méthode <code>Hoa\Worker\Run::widExists</code>, dans le cas échant nous

but also an error of meaning because "dans le cas échéant" isn't appropriate here, we should rather use "dans le cas contraire" nope ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.