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 | }; |