Infura开发手册

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

访问限流

为了保护其他用户可靠的访问我们的服务,当Infura在短时间内接收到 调用者发送的过量JSONRPC请求后将会对该调用者启用限流。

我如何知道自己被限流?

如果你被限流,那么你的JSONRPC响应的HTTP状态码将是429,同时 包含类似的JSONRPC错误响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32005,
    "message": "project ID request rate exceeded",
    "data": {
      "see": "https://infura.io/docs/ethereum/jsonrpc/ratelimits",
      "current_rps": 13.333,
      "allowed_rps": 10.0,
      "backoff_seconds": 30.0,
    }
  }
}

在data中包含了关于限流的3个字段:

  • current_rps:当前每秒访问次数
  • allowed_rps:当前允许的每秒访问次数
  • backoff_seconds:继续发送请求前的建议等待时间

被限流后我应该做什么?

最简单的方案就是等待上面响应中的backoff_seconds时间后,再继续发送API请求。

如果你经常被限流,考虑以下解决措施

  • 首先确认在你的请求URL中包含了有效的项目ID
  • 在本地缓存以太坊数据
  • 限制DApp启动时的JSONRPC请求,仅在用户需要时发起JSONRPC请求
  • 不要过于频繁的轮询Infura。以太坊大约15秒钟才出一个新块,因此 太频繁的查询没什么意义。可以考虑使用eth_subscribe来订阅新块通知。

Infura基于哪些因素来决定限流?

Infura的限流是基于以下因素的综合考虑:

  • 来源IP地址
  • 请求的JSONRPC方法
  • 项目ID

虽然我们的系统会持续地监测并调整限流措施,但是通常只有非常攻击性的 调用才会被限流。Infura+的用户在100请求/秒以下时绝不会被限流。免费 用户通常允许在30请求/秒以下,但是该参数会随网络负载情况而变化。