@balena-io/快乐眼球
此软件包补丁了节点JS http(s).Agent 执行 IETF 标准,"快乐眼球2"(rfc8305 (中文(简体) )) (中文(简体) ).
它通过尝试同时尝试一个给定的主机名的多个ip地址来提高客户端的性能和可靠性. 见 解释 更详细.
安装
npm i --save-dev @balena/happy-eyeballs
yarn add --dev @balena/happy-eyeballs
快速使用
要使用此库, 只需导入
import '@balena/happy-eyeballs/eye-patch';
或者说
require('@balena/happy-eyeballs/eye-patch')
在你的顶部 .js编号 :.ts 条目文件.
注:将替换 http.Agent.prototype.createConnection 财务报告和审定财务报表 https.Agent.prototype.createConnection,但它试图尽可能保留现有的功能.
明确用途
如果你想更明确,你可以明确补丁 http(s).Agent数字 :
import { patch } from '@balena/eye-patch';
import { Agent as HttpAgent } from 'http';
import { Agent as HttpsAgent } from 'https';
patch(HttpAgent, {delay: 300});
patch(HttpsAgent, {delay: 300});
虽然,这正是什么 import '@balena/happy-eyeballs/eye-patch'; 无论如何.
请注意: delay 指的是在尝试下一个地址之前的延迟。 这是浏览器使用的延迟 .
稍后您可以解开后缀, 这将取消最后的补丁 :
unpatch([HttpsAgent, HttpAgent])
或重置到代理的原始值 :
reset([HttpsAgent, HttpAgent])
另外,请注意,违约是 HttpAgent 财务报告和审定财务报表 HttpsAgent,因此,这与
reset()
接下来 patch 财务报告和审定财务报表 unpatch 我也一样.
你也可以执行自己的经纪人 并替换 createConnection 方法 :
import { createConnection } from '@balena/happy-eyeballs';
import { Agent as HttpAgent } from 'http';
import { Agent as HttpsAgent } from 'https';
export class MyHttpAgent extends HttpAgent {
createConnection = createConnection;
delay = 250;
}
export class MyHttpsAgent extends HttpsAgent {
createConnection = createConnection;
delay = 250;
}
这和以前的例子基本相同.
解释
基本上,算法相当于:
- 接收主机名
- 我们以前和这个东道主有联系吗?
- 如果是:
- 尝试上次成功连接的家族( Ipv4 或 IPv6), 如果我们之前已经连接到此主机
- 如果在300米范围内连接不成功,请继续下一步
- 如果没有,请采取下一步行动.
- DNS查询是否同时返回IPv4和IPv6地址?
- 如果是:尝试,在全部试验之前,两个地址同时进行
- 如果不是:只要试试现存家庭的地址
- 将每个地址按链条排列,同时对两个家庭进行试验,直至: *. 已连接 *. 所有连接尝试超时 *. 所有连接尝试失败
- 如果没有连接成功, 请返回第一次连接尝试出错, 或是“ 超时出错 ”