BackoffLib
1.0.0
지수 백 오프와 같은 다양한 백 오프 (지연) 루틴을 구현하는 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 Maxiumum 값을 가진 지수 백 오프BackoffIncremental 증분 백 오프BackoffIncrementalMax Maxiumum 값을 가진 증분 백 오프BackoffMultiplicative 곱셈 백 오프BackoffRandom 무작위 백 오프$Backoff->backoff(); - 백 오프 구현을 실행합니다.$Backoff->getInterval(); - 주어진 클래스의 알고리즘 구현. $Backoff->interval 수정합니다.$Backoff->getTime(); - 백 backoff() 를 호출 한 후 백 오프 (지연) $time 의 값을 반환합니다.$Backoff->getIntervalValue(); - 클래스의 $interval 값을 반환합니다.
$BackoffCaller($bo,$cb,$delayCb); - 지정된 BackoffBase 객체, bool function($data); 로 BackoffCaller 객체를 만듭니다. 콜백 및 int function($length) 지연 콜백 (성공시 반환 ). 보다 설명적인 사용에 대해서는 파일 헤더를 참조하십시오.$BackoffCaller->run(); - 콜백을 루프에서 true 때까지 콜백을 실행합니다.IBackoffMaximum 최대 값을 가진 클래스별로 구현했습니다.BackoffLib 디렉토리에서 phpunit 실행하십시오. 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 라이센스로 제공되는 오픈 소스 소프트웨어입니다. 자세한 내용은 라이센스 파일을 참조하십시오.