Библиотека PHP, которая реализует различные процедуры отключения (задержка), такие как экспоненциальный отключение. Классы могут использоваться для реализации различных типов задержек ( то есть с помощью sleep() , задержек между HTTP -запросами ). Смотрите ниже более описательный пример использования. Чтобы выполнить, позвоните в $class->backoff(); Функция backoff() объявляется абстрактной в BackoffBase и реализована в различных детских классах.
Экспоненциальная задержка отступления с показателем по умолчанию 2 будет увеличиваться следующим образом: 1, 2, 4, 16, 256
Повышенная задержка отключения с приращением по умолчанию 1 будет приращением следующим образом: 1, 2, 3, 4, 5, 6, 7
Мультипликативная задержка отключения с показателем по умолчанию 2 будет увеличиваться следующим образом: 0.5, 1, 2, 4, 8, 16, 32, 64
Пример использования: Использование алгоритма отступления, который медленно поддерживает вызовы API, если они возвращают «занятый» код состояния, чтобы сервер не был перегружен повторяющимися запросами. Каждый раз, когда сервер возвращает статус «занятой», задержка между вызовами API увеличивается.
BackoffBase - базовый класс, от которого все классы Backofflib унаследованы.BackoffCaller - с указанным объектом BackoffBase : реализует обратный вызов задержки и функцию обратного вызова Onfire. Может быть использован для быстрого реализации отборочного перерыва с минимальным кодом.BackoffExponential - экспоненциальный откатBackoffExponentialMax - экспоненциальный отключение со значением MaxiumumBackoffIncremental - постепенная отдачаBackoffIncrementalMax - инкрементная отдача со значением MaxiumumBackoffMultiplicative - мультипликативная отдачаBackoffRandom - случайная отдача$Backoff->backoff(); - Выполняет реализацию отборочного бака.$Backoff->getInterval(); - Реализация алгоритма для данного класса. Изменяет $Backoff->interval .$Backoff->getTime(); - Возвращает значение отборочного (задержка) $time после вызова backoff() .$Backoff->getIntervalValue(); - Возвращает стоимость $interval для класса.
$BackoffCaller($bo,$cb,$delayCb); - Создает объект BackoffCaller с указанным объектом BackoffBase , bool function($data); обратный вызов и обратный вызов задержки int function($length) (вернуть 0 при успехе) .). См. Заголовок файла для более описательного использования.$BackoffCaller->run(); - Выполняет обратный вызов в цикле, пока он не вернет true .IBackoffMaximum - реализовано классами, имеющими максимальное значение.phpunit в каталоге BackoffLib . require ( ' BackoffLib/Backoff.php ' );
$ be = new BackoffLib BackoffIncrementalMax ( 1 , 2 ); //increment by 1, max 2
function beo ( $ b ) {
$ b -> backoff ();
echo "$ b->time = " . $ b -> getTime () . PHP_EOL ;
}
for ( $ i = 1 ; $ i <= 5 ; $ i ++)
beo ( $ be );
echo " be->getCount = " . $ be -> getCount () . PHP_EOL ; require ( ' BackoffLib/Backoff.php ' );
$ be = new BackoffLib BackoffExponential ( 2.0 );
function beo ( $ b , $ backoff = true ) {
if ( $ backoff )
$ b -> backoff ();
echo "$ b->time = " . $ b -> getTime () . PHP_EOL ;
}
beo ( $ be , false );
beo ( $ be );
beo ( $ be );
beo ( $ be );
beo ( $ be );BackoffCaller require_once ( ' BackoffLib/Backoff.php ' );
define ( ' CB_MAX_COUNTER ' , 10 ); //hard limit for number of times the callback fires
define ( ' CB_MAX_DELAY ' , 64 ); //good limit for multiplicative backoff
//callback that fires on each backoff call
$ backoff_callback = function ( $ delayValue ) {
static $ counter = 0 ;
$ counter ++;
if ( is_numeric ( $ delayValue ))
$ delayValue = sprintf ( " %.2f " , $ delayValue ); //truncate the value
//output the call counter and the delay value
echo " [debug] callback # $ {counter}t $ {delayValue} n" ;
if ( isset ( $ delayValue ) && is_numeric ( $ delayValue ))
if ( $ delayValue >= CB_MAX_DELAY )
return true ; //halt backoffCaller execution, the delay has reached its maximum allowed value
if ( $ counter >= CB_MAX_COUNTER )
return true ; //halt execution, the callback counter has reached its maximum allowed value.
return false ; //continue backoffCaller execution: the next delay->backoff calls will occur
};
$ backoff_delay_callback = function ( $ len ) {
sleep ( $ len ); //implement a delay using sleep(): anything could be done here, i.e. limit the max delay.
return 0 ; //return 0 on success: the next backoff call will occur
};
//create a backoff that multiplies the interval by 2 each time it backs off
$ backoffClass = new BackoffLib BackoffMultiplicative ( 2.0 );
//create a caller class, that implements a basic delay-on-fire. the delay is actually handled in the callback.
$ backoff = new BackoffLib BackoffCaller ( $ backoffClass , $ backoff_callback , $ backoff_delay_callback );
$ backoff -> run (); //begin execution: can only be halted by returning TRUE from the callback. BackoffLib - это программное обеспечение с открытым исходным кодом, доступное по лицензии MIT. См. Файл лицензии для получения дополнительной информации.