PHPackages                             nikita2206/poller - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. nikita2206/poller

ActiveLibrary

nikita2206/poller
=================

Poller library can be used for polling stuff: Sockets, other processes, file system, anything!

0.1.3(11y ago)91.4k11PHP

Since Jul 23Pushed 11y ago2 watchersCompare

[ Source](https://github.com/nikita2206/poller)[ Packagist](https://packagist.org/packages/nikita2206/poller)[ RSS](/packages/nikita2206-poller/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (6)Used By (1)

Poller
------

[](#poller)

Poller is a library designed for polling non-blocking stuff.

[![Build Status](https://camo.githubusercontent.com/891156b7fb73c41e0718898ba85c7871fda96aa883a8fdda257e35ceeaab0f8d/68747470733a2f2f7472617669732d63692e6f72672f6e696b697461323230362f706f6c6c65722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/nikita2206/poller)

### Prerequisites

[](#prerequisites)

It's not a very common task for PHP but sometimes you really need to poll some things until they answer you something.

For example you can run other processes in the background and wait until they finish (you can use [poller-symfony-process](https://github.com/nikita2206/poller-symfony-process)package for it to work with Symfony's Process component) or you can poll sockets or streams.

### How to use

[](#how-to-use)

Suppose you have 10 processes that you need to run and you need to have only 3 processes running at the same time (only 3 job slots). To implement this you will need to write an implementation of `Poller\Task\Task` interface which will represent a single process or you can use already implemented `ProcessTask` from [poller-symfony-process](https://github.com/nikita2206/poller-symfony-process)package.

This way you will just need to instantiate a new `Poller\Task\TaskQueue` and enqueue all your tasks in it.

```
$tasksQueue = new TaskQueue();
$tasksQueue->enqueue(new ProcessTask(new Process("command to execute")));
```

Now you need to create a new Poller instance and pass it your queue object and how many tasks do you want to run simultaneously (how many job slots do you have):

```
$poller = new Poller($tasksQueue, 3);
```

And now you're ready to run the Poller:

```
$poller->run();
```

### Task events

[](#task-events)

You can also use events on Poller, we have:

```
Poller::EVENT_TASK_STARTED_PRE
Poller::EVENT_TASK_STARTED_POST
Poller::EVENT_TASK_FINISHED
Poller::EVENT_TASK_TERMINATED_PRE
Poller::EVENT_TASK_TERMINATED_POST
```

You can attach your listeners using `attachListener` method, f.e.:

```
$poller->attachListener(Poller::EVENT_TASK_STARTED_PRE, function ($eventName, NamedTask $task) {
    echo "Task ", $task->getName(), " is gonna be started!", "\n";
});

$poller->attachListener(Poller::EVENT_TASK_FINISHED, function ($eventName, NamedTask $task) {
    echo "Task ", $task->getName(), " was finished!", "\n";
});
```

Tasks queue
-----------

[](#tasks-queue)

As you already saw, Poller needs TaskQueue to get tasks from. But TaskQueue class that comes with Poller is pretty limited in a way that it's just a wrapper of SplQueue and it's not very extendable. What if, for example, you want to create a process that runs some tasks forever? The best case using TaskQueue could be adding new tasks on `finish` event, but it wouldn't be very readable.

Actually Poller accepts anything that implements `Poller\Task\PollerTaskQueue` interface. So you can easily implement infinite queue:

```
use Poller\Task\PollerTaskQueue;

class InfiniteTaskQueue implements PollerTaskQueue
{

    public function isEmpty()
    {
        return false;
    }

    public function dequeue()
    {
        return new YourOwnTask();
    }

}
```

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~15 days

Total

5

Last Release

4246d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/da80fb0f41ebaf2cfe7362d94099b6705e6838af0ae45a4f5f8d357d5cac0c87?d=identicon)[nikita2206](/maintainers/nikita2206)

---

Top Contributors

[![nikita2206](https://avatars.githubusercontent.com/u/1030688?v=4)](https://github.com/nikita2206 "nikita2206 (13 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/nikita2206-poller/health.svg)

```
[![Health](https://phpackages.com/badges/nikita2206-poller/health.svg)](https://phpackages.com/packages/nikita2206-poller)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
