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オブジェクトを使用:遅延ハンドラーコールバックと発火コールバック関数を実装します。最小限のコードでバックオフをすばやく実装するために使用できます。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)遅延コールバック(成功して0を返します) 。)。詳細な使用については、ファイルヘッダーを参照してください。$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ライセンスで入手可能なオープンソースソフトウェアです。詳細については、ライセンスファイルを参照してください。