La classe Swoole\Timer

(PECL swoole >= 1.9.0)

Introduction

Minuteur d'une précision de l'ordre de la milliseconde. L'implémentation sous-jacente repose sur epoll_wait et setitimer, avec un tas-min qui permet d'ajouter un grand nombre de minuteurs.

Dans les processus à E/S synchrones, tels que les processus Manager et TaskWorker, elle repose sur setitimer et les signaux.

Dans les processus à E/S asynchrones, elle repose sur le délai d'expiration de epoll_wait/kevent/poll/select.

Le système sous-jacent ne prend pas en charge les minuteurs dont le délai vaut 0 : une valeur inférieure à 1 milliseconde émet une E_WARNING et l'appel échoue. Cela diffère de langages tels que Node.js. Swoole\Event::defer() permet d'obtenir un résultat similaire.

<?php
Swoole\Event::defer(function () {
  echo "hello\n";
});
?>

Correction du minuteur : la durée d'exécution de la fonction de rappel n'influe pas sur l'instant du déclenchement suivant. Par exemple, pour un minuteur tick de 10 ms créé à 0,002 s, le premier rappel est exécuté à 0,012 s ; si la fonction de rappel prend 5 ms, le déclenchement suivant a tout de même lieu à 0,022 s, et non à 0,027 s.

En revanche, si la fonction de rappel s'exécute trop longtemps, au point de couvrir l'instant du déclenchement suivant, le système sous-jacent corrige le temps : il abandonne les déclenchements périmés et rappelle la fonction au prochain instant disponible. Par exemple, si la fonction de rappel exécutée à 0,012 s prend 15 ms, ce qui retarde le minuteur prévu à 0,022 s, le rappel est déclenché à nouveau à 0,032 s.

Par défaut, une coroutine est automatiquement créée pour exécuter la fonction de rappel lorsqu'un minuteur se déclenche. Ce comportement se désactive avec swoole_async_set().

Avertissement

Un minuteur ne fonctionne que dans l'espace du processus courant.

Avertissement

Les minuteurs sont purement asynchrones et incompatibles avec les fonctions d'E/S synchrones.

Avertissement

L'exécution d'un minuteur peut présenter de légers écarts de temps.

Synopsis de la classe

class Swoole\Timer {
/* Méthodes */
public static function after(int $ms, callable $callback, mixed ...$params): int|false
public static function clear(int $timer_id): bool
public static function clearAll(): bool
public static function exists(int $timer_id): bool
public static function info(int $timer_id): ?array
public static function list(): Swoole\Timer\Iterator
public static function set(array $settings): void
public static function stats(): array
public static function tick(int $ms, callable $callback, mixed ...$params): int|false
}

Sommaire

+add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top