mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-09 18:39:25 +02:00
modified
This commit is contained in:
-268
@@ -1,268 +0,0 @@
|
||||
|
||||
4.5.0 / 2023-08-06
|
||||
==================
|
||||
|
||||
**others**
|
||||
* [[`1e5e312`](http://github.com/node-modules/agentkeepalive/commit/1e5e312f36491243372dbfee0dd47607e7b3d94a)] - deps: remove debug and depd (#114) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
4.4.0 / 2023-08-05
|
||||
==================
|
||||
|
||||
**features**
|
||||
* [[`c7c1e93`](http://github.com/node-modules/agentkeepalive/commit/c7c1e93beba7310d7c2cc9647dd211a686d21cac)] - feat: return socket from createConnection (#113) (Nabeel Bukhari <<nabeel.bukhari@hotmail.com>>)
|
||||
|
||||
4.3.0 / 2023-03-06
|
||||
==================
|
||||
|
||||
**others**
|
||||
* [[`6f9852b`](http://github.com/node-modules/agentkeepalive/commit/6f9852bf6f674846103e403fd9c84e92fc24f820)] - deps: depd@2.0.0 (#109) (Brian DeHamer <<bdehamer@github.com>>)
|
||||
* [[`fd4bd9b`](http://github.com/node-modules/agentkeepalive/commit/fd4bd9b0e0f051de3cb49559d1b0d534a0ded18c)] - test: use npm install (#110) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
* [[`d52822c`](http://github.com/node-modules/agentkeepalive/commit/d52822c1243c689df1c8232a3bb14139cf87fae5)] - chore: update contributors (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
4.2.1 / 2022-02-21
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`8b13b5c`](http://github.com/node-modules/agentkeepalive/commit/8b13b5ca797f4779a0a8d393ad8ecb622cd27987)] - fix: explicitly set `| undefined` in type definitions (#99) (Benoit Lemoine <<lemoine.benoit@gmail.com>>)
|
||||
|
||||
4.2.0 / 2021-12-31
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`f418c67`](http://github.com/node-modules/agentkeepalive/commit/f418c67a63c061c7261592d4553bc455e0b0d306)] - fix: change `freeSocketTimeout` default value to 4000 (#102) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
**others**
|
||||
* [[`bc2a1ce`](http://github.com/node-modules/agentkeepalive/commit/bc2a1cea0884b4d18b0d244bf00006d9107963df)] - doc(readme): making `timeout`'s default clear (#100) (Aaron <<aaronarinder@gmail.com>>)
|
||||
|
||||
4.1.4 / 2021-02-05
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`4d04794`](http://github.com/node-modules/agentkeepalive/commit/4d047946b1547b4edff92ea40205aee4f0c8aa46)] - fix(types): correct `Https` constructor argument (#89) (Simen Bekkhus <<sbekkhus91@gmail.com>>)
|
||||
|
||||
4.1.3 / 2020-06-15
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`4ba9f9c`](http://github.com/node-modules/agentkeepalive/commit/4ba9f9c844f2a6b8037ce56599d25c69ef054d91)] - fix: compatible with node v12.16.3 (#91) (killa <<killa123@126.com>>)
|
||||
|
||||
4.1.2 / 2020-04-25
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`de66b02`](http://github.com/node-modules/agentkeepalive/commit/de66b0206d064a97129c2c31bcdabd4d64557b91)] - fix: detect http request timeout handler (#88) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
4.1.1 / 2020-04-25
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`bbd20c0`](http://github.com/node-modules/agentkeepalive/commit/bbd20c03b8cf7dfb00b3aad1ada26d4ab90d2d6e)] - fix: definition error (#87) (吖猩 <<whxaxes@qq.com>>)
|
||||
|
||||
**others**
|
||||
* [[`3b01699`](http://github.com/node-modules/agentkeepalive/commit/3b01699b8e90022d5f56898dd709e4fe7ee7cdaa)] - test: run test on node 12 (#84) (Igor Savin <<iselwin@gmail.com>>)
|
||||
|
||||
4.1.0 / 2019-10-12
|
||||
==================
|
||||
|
||||
**features**
|
||||
* [[`fe33b80`](http://github.com/node-modules/agentkeepalive/commit/fe33b800acc09109388bfe65107550952b6fc7b0)] - feat: Add `reusedSocket` property on client request (#82) (Weijia Wang <<starkwang@126.com>>)
|
||||
|
||||
**others**
|
||||
* [[`77ba744`](http://github.com/node-modules/agentkeepalive/commit/77ba744667bb6b9e5986a53e5222f62094db12b9)] - docs: fix grammar in readme (#81) (Herrington Darkholme <<2883231+HerringtonDarkholme@users.noreply.github.com>>)
|
||||
|
||||
4.0.2 / 2019-02-19
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`56d4a9b`](http://github.com/node-modules/agentkeepalive/commit/56d4a9b2a4499ea28943ddb590358d7831a02cb1)] - fix: HttpAgent export = internal (#74) (Andrew Leedham <<AndrewLeedham@outlook.com>>)
|
||||
|
||||
4.0.1 / 2019-02-19
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`bad1ac0`](http://github.com/node-modules/agentkeepalive/commit/bad1ac0e710fbc486717e14e68c59266d35df6a8)] - fix: HttpsAgent Type Definition (#71) (#72) (Andrew Leedham <<AndrewLeedham@outlook.com>>)
|
||||
* [[`f48a4a7`](http://github.com/node-modules/agentkeepalive/commit/f48a4a701ea6fbe43781c91e1c0aaad6e328ac7f)] - fix: export interface (#70) (Vinay <<vinaybedre@gmail.com>>)
|
||||
|
||||
**others**
|
||||
* [[`9124343`](http://github.com/node-modules/agentkeepalive/commit/91243437cfdd324cb97f39dee76746d5e5f4cd72)] - chore: add agent.options.keepAlive instead agent.keepAlive (fengmk2 <<fengmk2@gmail.com>>)
|
||||
* [[`d177d40`](http://github.com/node-modules/agentkeepalive/commit/d177d40422fe7296990b4e270cf498e3f33c18fa)] - test: add request timeout bigger than agent timeout cases (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
4.0.0 / 2018-10-23
|
||||
==================
|
||||
|
||||
**features**
|
||||
* [[`5c9f3bb`](http://github.com/node-modules/agentkeepalive/commit/5c9f3bbd60555744edcf777105b148982a1a42b6)] - feat: impl the new Agent extend http.Agent (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
**others**
|
||||
* [[`498c8f1`](http://github.com/node-modules/agentkeepalive/commit/498c8f13cf76600d3dd6e1c91cdf2d8292355dff)] - chore: move LICENSE from readme to file (fengmk2 <<fengmk2@gmail.com>>)
|
||||
* [[`4f39894`](http://github.com/node-modules/agentkeepalive/commit/4f398942ba2f90cf4501239e56ac4e6344931a01)] - bugfix: support agent.options.timeout on https agent (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
3.5.2 / 2018-10-19
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`5751fc1`](http://github.com/node-modules/agentkeepalive/commit/5751fc1180ed6544602c681ffbd08ca66a0cb12c)] - fix: sockLen being miscalculated when removing sockets (#60) (Ehden Sinai <<cixel@users.noreply.github.com>>)
|
||||
|
||||
3.5.1 / 2018-07-31
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`495f1ab`](http://github.com/node-modules/agentkeepalive/commit/495f1ab625d43945d72f68096b97db723d4f0657)] - fix: add the lost npm files (#66) (Henry Zhuang <<zhuanghengfei@gmail.com>>)
|
||||
|
||||
3.5.0 / 2018-07-31
|
||||
==================
|
||||
|
||||
**features**
|
||||
* [[`16f5aea`](http://github.com/node-modules/agentkeepalive/commit/16f5aeadfda57f1c602652f1472a63cc83cd05bf)] - feat: add typing define. (#65) (Henry Zhuang <<zhuanghengfei@gmail.com>>)
|
||||
|
||||
**others**
|
||||
* [[`28fa062`](http://github.com/node-modules/agentkeepalive/commit/28fa06246fb5103f88ebeeb8563757a9078b8157)] - docs: add "per host" to description of maxFreeSockets (tony-gutierrez <<tony.gutierrez@bluefletch.com>>)
|
||||
* [[`7df2577`](http://github.com/node-modules/agentkeepalive/commit/7df25774f00a1031ca4daad2878a17e0539072a2)] - test: run test on node 10 (#63) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
3.4.1 / 2018-03-08
|
||||
==================
|
||||
|
||||
**fixes**
|
||||
* [[`4d3a3b1`](http://github.com/node-modules/agentkeepalive/commit/4d3a3b1f7b16595febbbd39eeed72b2663549014)] - fix: Handle ipv6 addresses in host-header correctly with TLS (#53) (Mattias Holmlund <<u376@m1.holmlund.se>>)
|
||||
|
||||
**others**
|
||||
* [[`55a7a5c`](http://github.com/node-modules/agentkeepalive/commit/55a7a5cd33e97f9a8370083dcb041c5552f10ac9)] - test: stop timer after test end (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
3.4.0 / 2018-02-27
|
||||
==================
|
||||
|
||||
**features**
|
||||
* [[`bc7cadb`](http://github.com/node-modules/agentkeepalive/commit/bc7cadb30ecd2071e2b341ac53ae1a2b8155c43d)] - feat: use socket custom freeSocketKeepAliveTimeout first (#59) (fengmk2 <<fengmk2@gmail.com>>)
|
||||
|
||||
**others**
|
||||
* [[`138eda8`](http://github.com/node-modules/agentkeepalive/commit/138eda81e10b632aaa87bea0cb66d8667124c4e8)] - doc: fix `keepAliveMsecs` params description (#55) (Hongcai Deng <<admin@dhchouse.com>>)
|
||||
|
||||
3.3.0 / 2017-06-20
|
||||
==================
|
||||
|
||||
* feat: add statusChanged getter (#51)
|
||||
* chore: format License
|
||||
|
||||
3.2.0 / 2017-06-10
|
||||
==================
|
||||
|
||||
* feat: add expiring active sockets
|
||||
* test: add node 8 (#49)
|
||||
|
||||
3.1.0 / 2017-02-20
|
||||
==================
|
||||
|
||||
* feat: timeout support humanize ms (#48)
|
||||
|
||||
3.0.0 / 2016-12-20
|
||||
==================
|
||||
|
||||
* fix: emit agent socket close event
|
||||
* test: add remove excess calls to removeSocket
|
||||
* test: use egg-ci
|
||||
* test: refactor test with eslint rules
|
||||
* feat: merge _http_agent.js from 7.2.1
|
||||
|
||||
2.2.0 / 2016-06-26
|
||||
==================
|
||||
|
||||
* feat: Add browser shim (noop) for isomorphic use. (#39)
|
||||
* chore: add security check badge
|
||||
|
||||
2.1.1 / 2016-04-06
|
||||
==================
|
||||
|
||||
* https: fix ssl socket leak when keepalive is used
|
||||
* chore: remove circle ci image
|
||||
|
||||
2.1.0 / 2016-04-02
|
||||
==================
|
||||
|
||||
* fix: opened sockets number overflow maxSockets
|
||||
|
||||
2.0.5 / 2016-03-16
|
||||
==================
|
||||
|
||||
* fix: pick _evictSession to httpsAgent
|
||||
|
||||
2.0.4 / 2016-03-13
|
||||
==================
|
||||
|
||||
* test: add Circle ci
|
||||
* test: add appveyor ci build
|
||||
* refactor: make sure only one error listener
|
||||
* chore: use codecov
|
||||
* fix: handle idle socket error
|
||||
* test: run on more node versions
|
||||
|
||||
2.0.3 / 2015-08-03
|
||||
==================
|
||||
|
||||
* fix: add default error handler to avoid Unhandled error event throw
|
||||
|
||||
2.0.2 / 2015-04-25
|
||||
==================
|
||||
|
||||
* fix: remove socket from freeSockets on 'timeout' (@pmalouin)
|
||||
|
||||
2.0.1 / 2015-04-19
|
||||
==================
|
||||
|
||||
* fix: add timeoutSocketCount to getCurrentStatus()
|
||||
* feat(getCurrentStatus): add getCurrentStatus
|
||||
|
||||
2.0.0 / 2015-04-01
|
||||
==================
|
||||
|
||||
* fix: socket.destroyed always be undefined on 0.10.x
|
||||
* Make it compatible with node v0.10.x (@lattmann)
|
||||
|
||||
1.2.1 / 2015-03-23
|
||||
==================
|
||||
|
||||
* patch from iojs: don't overwrite servername option
|
||||
* patch commits from joyent/node
|
||||
* add max sockets test case
|
||||
* add nagle algorithm delayed link
|
||||
|
||||
1.2.0 / 2014-09-02
|
||||
==================
|
||||
|
||||
* allow set keepAliveTimeout = 0
|
||||
* support timeout on working socket. fixed #6
|
||||
|
||||
1.1.0 / 2014-08-28
|
||||
==================
|
||||
|
||||
* add some socket counter for deep monitor
|
||||
|
||||
1.0.0 / 2014-08-13
|
||||
==================
|
||||
|
||||
* update _http_agent, only support 0.11+, only support node 0.11.0+
|
||||
|
||||
0.2.2 / 2013-11-19
|
||||
==================
|
||||
|
||||
* support node 0.8 and node 0.10
|
||||
|
||||
0.2.1 / 2013-11-08
|
||||
==================
|
||||
|
||||
* fix socket does not timeout bug, it will hang on life, must use 0.2.x on node 0.11
|
||||
|
||||
0.2.0 / 2013-11-06
|
||||
==================
|
||||
|
||||
* use keepalive agent on node 0.11+ impl
|
||||
|
||||
0.1.5 / 2013-06-24
|
||||
==================
|
||||
|
||||
* support coveralls
|
||||
* add node 0.10 test
|
||||
* add 0.8.22 original https.js
|
||||
* add original http.js module to diff
|
||||
* update jscover
|
||||
* mv pem to fixtures
|
||||
* add https agent usage
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright(c) node-modules and other contributors.
|
||||
Copyright(c) 2012 - 2015 fengmk2 <fengmk2@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
-256
@@ -1,256 +0,0 @@
|
||||
# agentkeepalive
|
||||
|
||||
[![NPM version][npm-image]][npm-url]
|
||||
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
||||
[](https://github.com/node-modules/agentkeepalive/actions/workflows/nodejs.yml)
|
||||
[![npm download][download-image]][download-url]
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/agentkeepalive.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/agentkeepalive
|
||||
[snyk-image]: https://snyk.io/test/npm/agentkeepalive/badge.svg?style=flat-square
|
||||
[snyk-url]: https://snyk.io/test/npm/agentkeepalive
|
||||
[download-image]: https://img.shields.io/npm/dm/agentkeepalive.svg?style=flat-square
|
||||
[download-url]: https://npmjs.org/package/agentkeepalive
|
||||
|
||||
The enhancement features `keep alive` `http.Agent`. Support `http` and `https`.
|
||||
|
||||
## What's different from original `http.Agent`?
|
||||
|
||||
- `keepAlive=true` by default
|
||||
- Disable Nagle's algorithm: `socket.setNoDelay(true)`
|
||||
- Add free socket timeout: avoid long time inactivity socket leak in the free-sockets queue.
|
||||
- Add active socket timeout: avoid long time inactivity socket leak in the active-sockets queue.
|
||||
- TTL for active socket.
|
||||
|
||||
## Node.js version required
|
||||
|
||||
Support Node.js >= `8.0.0`
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
$ npm install agentkeepalive --save
|
||||
```
|
||||
|
||||
## new Agent([options])
|
||||
|
||||
* `options` {Object} Set of configurable options to set on the agent.
|
||||
Can have the following fields:
|
||||
* `keepAlive` {Boolean} Keep sockets around in a pool to be used by
|
||||
other requests in the future. Default = `true`.
|
||||
* `keepAliveMsecs` {Number} When using the keepAlive option, specifies the initial delay
|
||||
for TCP Keep-Alive packets. Ignored when the keepAlive option is false or undefined. Defaults to 1000.
|
||||
Default = `1000`. Only relevant if `keepAlive` is set to `true`.
|
||||
* `freeSocketTimeout`: {Number} Sets the free socket to timeout
|
||||
after `freeSocketTimeout` milliseconds of inactivity on the free socket.
|
||||
The default [server-side timeout](https://nodejs.org/api/http.html#serverkeepalivetimeout) is 5000 milliseconds, to [avoid ECONNRESET exceptions](https://medium.com/ssense-tech/reduce-networking-errors-in-nodejs-23b4eb9f2d83), we set the default value to `4000` milliseconds.
|
||||
Only relevant if `keepAlive` is set to `true`.
|
||||
* `timeout`: {Number} Sets the working socket to timeout
|
||||
after `timeout` milliseconds of inactivity on the working socket.
|
||||
Default is `freeSocketTimeout * 2` so long as that value is greater than or equal to 8 seconds, otherwise the default is 8 seconds.
|
||||
* `maxSockets` {Number} Maximum number of sockets to allow per
|
||||
host. Default = `Infinity`.
|
||||
* `maxFreeSockets` {Number} Maximum number of sockets (per host) to leave open
|
||||
in a free state. Only relevant if `keepAlive` is set to `true`.
|
||||
Default = `256`.
|
||||
* `socketActiveTTL` {Number} Sets the socket active time to live, even if it's in use.
|
||||
If not set, the behaviour keeps the same (the socket will be released only when free)
|
||||
Default = `null`.
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const http = require('http');
|
||||
const Agent = require('agentkeepalive');
|
||||
|
||||
const keepaliveAgent = new Agent({
|
||||
maxSockets: 100,
|
||||
maxFreeSockets: 10,
|
||||
timeout: 60000, // active socket keepalive for 60 seconds
|
||||
freeSocketTimeout: 30000, // free socket keepalive for 30 seconds
|
||||
});
|
||||
|
||||
const options = {
|
||||
host: 'cnodejs.org',
|
||||
port: 80,
|
||||
path: '/',
|
||||
method: 'GET',
|
||||
agent: keepaliveAgent,
|
||||
};
|
||||
|
||||
const req = http.request(options, res => {
|
||||
console.log('STATUS: ' + res.statusCode);
|
||||
console.log('HEADERS: ' + JSON.stringify(res.headers));
|
||||
res.setEncoding('utf8');
|
||||
res.on('data', function (chunk) {
|
||||
console.log('BODY: ' + chunk);
|
||||
});
|
||||
});
|
||||
req.on('error', e => {
|
||||
console.log('problem with request: ' + e.message);
|
||||
});
|
||||
req.end();
|
||||
|
||||
setTimeout(() => {
|
||||
if (keepaliveAgent.statusChanged) {
|
||||
console.log('[%s] agent status changed: %j', Date(), keepaliveAgent.getCurrentStatus());
|
||||
}
|
||||
}, 2000);
|
||||
|
||||
```
|
||||
|
||||
### `getter agent.statusChanged`
|
||||
|
||||
counters have change or not after last checkpoint.
|
||||
|
||||
### `agent.getCurrentStatus()`
|
||||
|
||||
`agent.getCurrentStatus()` will return a object to show the status of this agent:
|
||||
|
||||
```js
|
||||
{
|
||||
createSocketCount: 10,
|
||||
closeSocketCount: 5,
|
||||
timeoutSocketCount: 0,
|
||||
requestCount: 5,
|
||||
freeSockets: { 'localhost:57479:': 3 },
|
||||
sockets: { 'localhost:57479:': 5 },
|
||||
requests: {}
|
||||
}
|
||||
```
|
||||
|
||||
### Support `https`
|
||||
|
||||
```js
|
||||
const https = require('https');
|
||||
const HttpsAgent = require('agentkeepalive').HttpsAgent;
|
||||
|
||||
const keepaliveAgent = new HttpsAgent();
|
||||
// https://www.google.com/search?q=nodejs&sugexp=chrome,mod=12&sourceid=chrome&ie=UTF-8
|
||||
const options = {
|
||||
host: 'www.google.com',
|
||||
port: 443,
|
||||
path: '/search?q=nodejs&sugexp=chrome,mod=12&sourceid=chrome&ie=UTF-8',
|
||||
method: 'GET',
|
||||
agent: keepaliveAgent,
|
||||
};
|
||||
|
||||
const req = https.request(options, res => {
|
||||
console.log('STATUS: ' + res.statusCode);
|
||||
console.log('HEADERS: ' + JSON.stringify(res.headers));
|
||||
res.setEncoding('utf8');
|
||||
res.on('data', chunk => {
|
||||
console.log('BODY: ' + chunk);
|
||||
});
|
||||
});
|
||||
|
||||
req.on('error', e => {
|
||||
console.log('problem with request: ' + e.message);
|
||||
});
|
||||
req.end();
|
||||
|
||||
setTimeout(() => {
|
||||
console.log('agent status: %j', keepaliveAgent.getCurrentStatus());
|
||||
}, 2000);
|
||||
```
|
||||
|
||||
### Support `req.reusedSocket`
|
||||
|
||||
This agent implements the `req.reusedSocket` to determine whether a request is send through a reused socket.
|
||||
|
||||
When server closes connection at unfortunate time ([keep-alive race](https://code-examples.net/en/q/28a8069)), the http client will throw a `ECONNRESET` error. Under this circumstance, `req.reusedSocket` is useful when we want to retry the request automatically.
|
||||
|
||||
```js
|
||||
const http = require('http');
|
||||
const Agent = require('agentkeepalive');
|
||||
const agent = new Agent();
|
||||
|
||||
const req = http
|
||||
.get('http://localhost:3000', { agent }, (res) => {
|
||||
// ...
|
||||
})
|
||||
.on('error', (err) => {
|
||||
if (req.reusedSocket && err.code === 'ECONNRESET') {
|
||||
// retry the request or anything else...
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
This behavior is consistent with Node.js core. But through `agentkeepalive`, you can use this feature in older Node.js version.
|
||||
|
||||
## [Benchmark](https://github.com/node-modules/agentkeepalive/tree/master/benchmark)
|
||||
|
||||
run the benchmark:
|
||||
|
||||
```bash
|
||||
cd benchmark
|
||||
sh start.sh
|
||||
```
|
||||
|
||||
Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz
|
||||
|
||||
node@v0.8.9
|
||||
|
||||
50 maxSockets, 60 concurrent, 1000 requests per concurrent, 5ms delay
|
||||
|
||||
Keep alive agent (30 seconds):
|
||||
|
||||
```js
|
||||
Transactions: 60000 hits
|
||||
Availability: 100.00 %
|
||||
Elapsed time: 29.70 secs
|
||||
Data transferred: 14.88 MB
|
||||
Response time: 0.03 secs
|
||||
Transaction rate: 2020.20 trans/sec
|
||||
Throughput: 0.50 MB/sec
|
||||
Concurrency: 59.84
|
||||
Successful transactions: 60000
|
||||
Failed transactions: 0
|
||||
Longest transaction: 0.15
|
||||
Shortest transaction: 0.01
|
||||
```
|
||||
|
||||
Normal agent:
|
||||
|
||||
```js
|
||||
Transactions: 60000 hits
|
||||
Availability: 100.00 %
|
||||
Elapsed time: 46.53 secs
|
||||
Data transferred: 14.88 MB
|
||||
Response time: 0.05 secs
|
||||
Transaction rate: 1289.49 trans/sec
|
||||
Throughput: 0.32 MB/sec
|
||||
Concurrency: 59.81
|
||||
Successful transactions: 60000
|
||||
Failed transactions: 0
|
||||
Longest transaction: 0.45
|
||||
Shortest transaction: 0.00
|
||||
```
|
||||
|
||||
Socket created:
|
||||
|
||||
```bash
|
||||
[proxy.js:120000] keepalive, 50 created, 60000 requestFinished, 1200 req/socket, 0 requests, 0 sockets, 0 unusedSockets, 50 timeout
|
||||
{" <10ms":662," <15ms":17825," <20ms":20552," <30ms":17646," <40ms":2315," <50ms":567," <100ms":377," <150ms":56," <200ms":0," >=200ms+":0}
|
||||
----------------------------------------------------------------
|
||||
[proxy.js:120000] normal , 53866 created, 84260 requestFinished, 1.56 req/socket, 0 requests, 0 sockets
|
||||
{" <10ms":75," <15ms":1112," <20ms":10947," <30ms":32130," <40ms":8228," <50ms":3002," <100ms":4274," <150ms":181," <200ms":18," >=200ms+":33}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
<!-- GITCONTRIBUTOR_START -->
|
||||
|
||||
## Contributors
|
||||
|
||||
|[<img src="https://avatars.githubusercontent.com/u/156269?v=4" width="100px;"/><br/><sub><b>fengmk2</b></sub>](https://github.com/fengmk2)<br/>|[<img src="https://avatars.githubusercontent.com/u/985607?v=4" width="100px;"/><br/><sub><b>dead-horse</b></sub>](https://github.com/dead-horse)<br/>|[<img src="https://avatars.githubusercontent.com/u/5557458?v=4" width="100px;"/><br/><sub><b>AndrewLeedham</b></sub>](https://github.com/AndrewLeedham)<br/>|[<img src="https://avatars.githubusercontent.com/u/5243774?v=4" width="100px;"/><br/><sub><b>ngot</b></sub>](https://github.com/ngot)<br/>|[<img src="https://avatars.githubusercontent.com/u/25919630?v=4" width="100px;"/><br/><sub><b>wrynearson</b></sub>](https://github.com/wrynearson)<br/>|[<img src="https://avatars.githubusercontent.com/u/26738844?v=4" width="100px;"/><br/><sub><b>aaronArinder</b></sub>](https://github.com/aaronArinder)<br/>|
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
|[<img src="https://avatars.githubusercontent.com/u/10976983?v=4" width="100px;"/><br/><sub><b>alexpenev-s</b></sub>](https://github.com/alexpenev-s)<br/>|[<img src="https://avatars.githubusercontent.com/u/959726?v=4" width="100px;"/><br/><sub><b>blemoine</b></sub>](https://github.com/blemoine)<br/>|[<img src="https://avatars.githubusercontent.com/u/398027?v=4" width="100px;"/><br/><sub><b>bdehamer</b></sub>](https://github.com/bdehamer)<br/>|[<img src="https://avatars.githubusercontent.com/u/4985201?v=4" width="100px;"/><br/><sub><b>DylanPiercey</b></sub>](https://github.com/DylanPiercey)<br/>|[<img src="https://avatars.githubusercontent.com/u/3770250?v=4" width="100px;"/><br/><sub><b>cixel</b></sub>](https://github.com/cixel)<br/>|[<img src="https://avatars.githubusercontent.com/u/2883231?v=4" width="100px;"/><br/><sub><b>HerringtonDarkholme</b></sub>](https://github.com/HerringtonDarkholme)<br/>|
|
||||
|[<img src="https://avatars.githubusercontent.com/u/1433247?v=4" width="100px;"/><br/><sub><b>denghongcai</b></sub>](https://github.com/denghongcai)<br/>|[<img src="https://avatars.githubusercontent.com/u/1847934?v=4" width="100px;"/><br/><sub><b>kibertoad</b></sub>](https://github.com/kibertoad)<br/>|[<img src="https://avatars.githubusercontent.com/u/5236150?v=4" width="100px;"/><br/><sub><b>pangorgo</b></sub>](https://github.com/pangorgo)<br/>|[<img src="https://avatars.githubusercontent.com/u/588898?v=4" width="100px;"/><br/><sub><b>mattiash</b></sub>](https://github.com/mattiash)<br/>|[<img src="https://avatars.githubusercontent.com/u/182440?v=4" width="100px;"/><br/><sub><b>nabeelbukhari</b></sub>](https://github.com/nabeelbukhari)<br/>|[<img src="https://avatars.githubusercontent.com/u/1411117?v=4" width="100px;"/><br/><sub><b>pmalouin</b></sub>](https://github.com/pmalouin)<br/>|
|
||||
[<img src="https://avatars.githubusercontent.com/u/1404810?v=4" width="100px;"/><br/><sub><b>SimenB</b></sub>](https://github.com/SimenB)<br/>|[<img src="https://avatars.githubusercontent.com/u/2630384?v=4" width="100px;"/><br/><sub><b>vinaybedre</b></sub>](https://github.com/vinaybedre)<br/>|[<img src="https://avatars.githubusercontent.com/u/10933333?v=4" width="100px;"/><br/><sub><b>starkwang</b></sub>](https://github.com/starkwang)<br/>|[<img src="https://avatars.githubusercontent.com/u/6897780?v=4" width="100px;"/><br/><sub><b>killagu</b></sub>](https://github.com/killagu)<br/>|[<img src="https://avatars.githubusercontent.com/u/15345331?v=4" width="100px;"/><br/><sub><b>tony-gutierrez</b></sub>](https://github.com/tony-gutierrez)<br/>|[<img src="https://avatars.githubusercontent.com/u/5856440?v=4" width="100px;"/><br/><sub><b>whxaxes</b></sub>](https://github.com/whxaxes)<br/>
|
||||
|
||||
This project follows the git-contributor [spec](https://github.com/xudafeng/git-contributor), auto updated at `Sat Aug 05 2023 02:36:31 GMT+0800`.
|
||||
|
||||
<!-- GITCONTRIBUTOR_END -->
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
module.exports = noop;
|
||||
module.exports.HttpsAgent = noop;
|
||||
|
||||
// Noop function for browser since native api's don't use agents.
|
||||
function noop () {}
|
||||
-65
@@ -1,65 +0,0 @@
|
||||
import * as http from 'http';
|
||||
import * as https from 'https';
|
||||
import * as net from 'net';
|
||||
|
||||
interface PlainObject {
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
declare class HttpAgent extends http.Agent {
|
||||
constructor(opts?: AgentKeepAlive.HttpOptions);
|
||||
readonly statusChanged: boolean;
|
||||
createConnection(options: net.NetConnectOpts, cb?: Function): net.Socket;
|
||||
createSocket(req: http.IncomingMessage, options: http.RequestOptions, cb: Function): void;
|
||||
getCurrentStatus(): AgentKeepAlive.AgentStatus;
|
||||
}
|
||||
|
||||
interface Constants {
|
||||
CURRENT_ID: Symbol;
|
||||
CREATE_ID: Symbol;
|
||||
INIT_SOCKET: Symbol;
|
||||
CREATE_HTTPS_CONNECTION: Symbol;
|
||||
SOCKET_CREATED_TIME: Symbol;
|
||||
SOCKET_NAME: Symbol;
|
||||
SOCKET_REQUEST_COUNT: Symbol;
|
||||
SOCKET_REQUEST_FINISHED_COUNT: Symbol;
|
||||
}
|
||||
|
||||
declare class AgentKeepAlive extends HttpAgent {}
|
||||
|
||||
declare namespace AgentKeepAlive {
|
||||
export interface AgentStatus {
|
||||
createSocketCount: number;
|
||||
createSocketErrorCount: number;
|
||||
closeSocketCount: number;
|
||||
errorSocketCount: number;
|
||||
timeoutSocketCount: number;
|
||||
requestCount: number;
|
||||
freeSockets: PlainObject;
|
||||
sockets: PlainObject;
|
||||
requests: PlainObject;
|
||||
}
|
||||
|
||||
interface CommonHttpOption {
|
||||
keepAlive?: boolean | undefined;
|
||||
freeSocketTimeout?: number | undefined;
|
||||
freeSocketKeepAliveTimeout?: number | undefined;
|
||||
timeout?: number | undefined;
|
||||
socketActiveTTL?: number | undefined;
|
||||
}
|
||||
|
||||
export interface HttpOptions extends http.AgentOptions, CommonHttpOption { }
|
||||
export interface HttpsOptions extends https.AgentOptions, CommonHttpOption { }
|
||||
|
||||
export class HttpsAgent extends https.Agent {
|
||||
constructor(opts?: HttpsOptions);
|
||||
readonly statusChanged: boolean;
|
||||
createConnection(options: net.NetConnectOpts, cb?: Function): net.Socket;
|
||||
createSocket(req: http.IncomingMessage, options: http.RequestOptions, cb: Function): void;
|
||||
getCurrentStatus(): AgentStatus;
|
||||
}
|
||||
|
||||
export const constants: Constants;
|
||||
}
|
||||
|
||||
export = AgentKeepAlive;
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = require('./lib/agent');
|
||||
module.exports.HttpsAgent = require('./lib/https_agent');
|
||||
module.exports.constants = require('./lib/constants');
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"name": "agentkeepalive",
|
||||
"version": "4.5.0",
|
||||
"description": "Missing keepalive http.Agent",
|
||||
"main": "index.js",
|
||||
"browser": "browser.js",
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.d.ts",
|
||||
"browser.js",
|
||||
"lib"
|
||||
],
|
||||
"scripts": {
|
||||
"contributor": "git-contributor",
|
||||
"test": "npm run lint && egg-bin test --full-trace",
|
||||
"test-local": "egg-bin test --full-trace",
|
||||
"cov": "cross-env NODE_DEBUG=agentkeepalive egg-bin cov --full-trace",
|
||||
"ci": "npm run lint && npm run cov",
|
||||
"lint": "eslint lib test index.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/node-modules/agentkeepalive.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/node-modules/agentkeepalive/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"http",
|
||||
"https",
|
||||
"agent",
|
||||
"keepalive",
|
||||
"agentkeepalive",
|
||||
"HttpAgent",
|
||||
"HttpsAgent"
|
||||
],
|
||||
"dependencies": {
|
||||
"humanize-ms": "^1.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"coffee": "^5.3.0",
|
||||
"cross-env": "^6.0.3",
|
||||
"egg-bin": "^4.9.0",
|
||||
"eslint": "^5.7.0",
|
||||
"eslint-config-egg": "^7.1.0",
|
||||
"git-contributor": "^2.0.0",
|
||||
"mm": "^2.4.1",
|
||||
"pedding": "^1.1.0",
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.0.0"
|
||||
},
|
||||
"author": "fengmk2 <fengmk2@gmail.com> (https://github.com/fengmk2)",
|
||||
"license": "MIT"
|
||||
}
|
||||
Reference in New Issue
Block a user