root / HServer / 00.Server / 00.Program / node_modules / backo2 / index.js
이력 | 보기 | 이력해설 | 다운로드 (1.37 KB)
| 1 | 39 | HKM | |
|---|---|---|---|
| 2 | /**
|
||
| 3 | * Expose `Backoff`.
|
||
| 4 | */
|
||
| 5 | |||
| 6 | module.exports = Backoff; |
||
| 7 | |||
| 8 | /**
|
||
| 9 | * Initialize backoff timer with `opts`.
|
||
| 10 | *
|
||
| 11 | * - `min` initial timeout in milliseconds [100]
|
||
| 12 | * - `max` max timeout [10000]
|
||
| 13 | * - `jitter` [0]
|
||
| 14 | * - `factor` [2]
|
||
| 15 | *
|
||
| 16 | * @param {Object} opts
|
||
| 17 | * @api public
|
||
| 18 | */
|
||
| 19 | |||
| 20 | function Backoff(opts) { |
||
| 21 | opts = opts || {};
|
||
| 22 | this.ms = opts.min || 100; |
||
| 23 | this.max = opts.max || 10000; |
||
| 24 | this.factor = opts.factor || 2; |
||
| 25 | this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; |
||
| 26 | this.attempts = 0; |
||
| 27 | } |
||
| 28 | |||
| 29 | /**
|
||
| 30 | * Return the backoff duration.
|
||
| 31 | *
|
||
| 32 | * @return {Number}
|
||
| 33 | * @api public
|
||
| 34 | */
|
||
| 35 | |||
| 36 | Backoff.prototype.duration = function(){ |
||
| 37 | var ms = this.ms * Math.pow(this.factor, this.attempts++); |
||
| 38 | if (this.jitter) { |
||
| 39 | var rand = Math.random();
|
||
| 40 | var deviation = Math.floor(rand * this.jitter * ms); |
||
| 41 | ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; |
||
| 42 | } |
||
| 43 | return Math.min(ms, this.max) | 0; |
||
| 44 | }; |
||
| 45 | |||
| 46 | /**
|
||
| 47 | * Reset the number of attempts.
|
||
| 48 | *
|
||
| 49 | * @api public
|
||
| 50 | */
|
||
| 51 | |||
| 52 | Backoff.prototype.reset = function(){ |
||
| 53 | this.attempts = 0; |
||
| 54 | }; |
||
| 55 | |||
| 56 | /**
|
||
| 57 | * Set the minimum duration
|
||
| 58 | *
|
||
| 59 | * @api public
|
||
| 60 | */
|
||
| 61 | |||
| 62 | Backoff.prototype.setMin = function(min){ |
||
| 63 | this.ms = min;
|
||
| 64 | }; |
||
| 65 | |||
| 66 | /**
|
||
| 67 | * Set the maximum duration
|
||
| 68 | *
|
||
| 69 | * @api public
|
||
| 70 | */
|
||
| 71 | |||
| 72 | Backoff.prototype.setMax = function(max){ |
||
| 73 | this.max = max;
|
||
| 74 | }; |
||
| 75 | |||
| 76 | /**
|
||
| 77 | * Set the jitter
|
||
| 78 | *
|
||
| 79 | * @api public
|
||
| 80 | */
|
||
| 81 | |||
| 82 | Backoff.prototype.setJitter = function(jitter){ |
||
| 83 | this.jitter = jitter;
|
||
| 84 | }; |