RPC 请求的工作原理:区块链节点指南 |Quicknode 🤖 新推出:《Quicknode 》AI 烹饪指南 10个经过验证的AI编程教程agents 。
查看食谱
我们的通讯中包含丰富的免费资源、Quicknode 动态、Web3行业洞察等内容。
CLI、Admin API 、MCP、SDK ,以及支持 75 多个区块链的原生 AI 工具。由开发者打造,专为开发者服务。
涵盖 Python、Ruby 和 JavaScript 的最新代码示例。关于智能合约、NFT 和去中心化应用(dApp)的深入指南。
通过 SOC 2 II 类认证 · ISO 27001
答案 > 了解 RPC 和 API > RPC 请求是如何工作的? // Tags
RPC 请求 JSON-RPC 区块链 API 调用
简而言之: RPC(远程过程调用)请求 是应用程序与区块链节点进行通信的方式。您的应用会向 RPCendpoint 发送一条 JSON 格式的消息,其中指定要调用的方法以及要包含的参数。节点会处理该请求,根据区块链的状态执行相应的逻辑,并返回包含结果的 JSON 响应。每次钱包余额查询、交易提交以及智能合约交互都遵循这种请求-响应模式。
简明解释 当您在加密货币钱包中点击“发送”,或在资产组合追踪器上查看代币余额时,您的应用程序并不能直接访问区块链。它需要向节点查询这些信息。它用于查询的语言称为 JSON-RPC,这是一种轻量级协议,将请求和响应结构化为简单的 JSON 对象。
对话的运作方式如下。您的应用程序会构建一个包含四个字段的请求对象:JSON-RPC 版本(始终为“2.0”)、用于告知节点应执行何种操作的方法名、为该操作提供上下文的参数数组,以及一个唯一 ID(以便您的应用程序将响应与请求进行匹配)。它会将此对象作为 HTTP POST 请求发送至 RPC 网址endpoint 。 节点接收请求后,会查询或计算答案,并返回一个响应对象。该响应对象包含相同的 ID,以及一个结果字段(如果操作成功)或一个错误字段(如果出现问题)。
例如,要查询某个钱包地址的 ETH 余额,您的应用程序会发送一个方法为“eth_getBalance”的请求,并附带两个参数:钱包地址和“latest”(指最新区块)。节点会查询当前状态,找到与该地址关联的余额,并以十六进制值的形式返回。 随后,您的应用程序将该十六进制值转换为人类可读的数字并显示出来。使用高性能提供商时,整个往返过程通常只需几十毫秒。
常见 RPC 方法的剖析
每个区块链都定义了一组节点必须支持的标准 RPC 方法。在以太坊(Ethereum )和 EVM 兼容链上,这些方法遵循“eth_”命名空间约定。 读取操作会在不修改区块链状态的情况下查询其状态。“eth_blockNumber”返回最新的区块高度。“eth_getBalance”返回某个账户在指定区块处的原生代币余额。“eth_call”以只读模式mode 执行智能合约函数,您的应用正是通过这种方式,在不消耗 gas 的情况下获取代币余额、NFT 元数据以及 DeFi 协议状态。
写入操作会将数据提交至网络,以便将其纳入区块。“eth_sendRawTransaction”会将一笔已签名的交易广播至内存池(mempool),验证者会从中挑选该交易并将其纳入区块。“eth_estimateGas”通过模拟交易来预测其将消耗多少 gas,从而帮助您的应用在发送前设置适当的 gas 限制。
订阅机制支持通过 WebSocket 连接进行实时通信。 您的应用无需通过“eth_blockNumber”反复轮询节点来检测新区块,而是可以调用“eth_subscribe”并传入“newHeads”参数,节点便会在生成新区块头时将其推送至您的应用。这种方式比轮询高效得多且延迟更低,也是实时去中心化应用(dapp)体验的基础,例如实时交易流、事件监听器和即时余额更新。
Solana 它使用了一组针对其基于账户的模型进行优化的不同方法。“getBalance”返回账户的SOL余额。“getTransaction”根据签名检索已确认的交易。“getAccountInfo”返回存储在账户中的数据,在Solana 上,这些数据既包括代币余额,也包括程序状态。尽管方法名称不同,但底层的JSON-RPC模式是相同的:请求包含方法和参数,响应包含结果或错误。
请求生命周期的幕后原理 当您的应用程序发送 RPC 请求时,在收到响应之前会经历多个步骤。首先,HTTP 客户端与endpoint 建立 TCP 连接,并执行 TLS 握手以加密通信通道。然后,它发送 JSON 有效载荷。 节点的 RPC 服务器会解析该请求,验证方法名称和参数,并将其路由到相应的处理程序。处理程序会查询缓存数据、查询节点的本地数据库,或执行计算(例如在 EVM 中调用智能合约)。结果准备就绪后,节点会将其序列化为 JSON 格式,并通过同一连接发送回去。
每个步骤都会增加时间。DNS 解析、TCP 握手、TLS 协商、请求序列化、节点处理、响应序列化以及网络传输都会影响总响应时间。这就是为什么应用程序与 RPC 节点之间的地理距离很重要,为什么连接池和 HTTP/2 多路复用能提高吞吐量,以及为什么在客户端缓存高频请求的数据可以减少不必要的往返次数。
批量请求是 JSON-RPC 规范的一项功能,它允许您在单次 HTTP 调用中发送多个请求。您无需为五个不同的钱包余额分别发送五个独立的请求,而是将这五个请求打包成一个 JSON 数组并一次性发送。节点会依次处理每个请求,并返回一个响应数组。批量处理可以减少 HTTP 开销并提高吞吐量,尽管每个单独的请求在节点端消耗的处理资源仍然相同。
错误处理与最佳实践 当出现问题时,RPC 响应会包含标准错误代码。格式不正确的请求会返回解析错误;无效的方法名会返回“方法未找到”错误;速率限制通常会返回 HTTP 429 状态码或包含代码 -32005 的 JSON-RPC 错误。理解这些错误代码并在应用程序中妥善处理它们,对于构建可靠的区块链软件至关重要。
针对瞬态故障,采用指数退避的重试机制是一种最佳实践。如果请求因网络故障或节点暂时过载而失败,您的应用应等待一段时间后再重试,并且每次重试时逐步延长等待时间。这样可以防止应用对运行不畅的节点进行频繁请求,从而避免使问题恶化。设置合理的超时时间同样重要,因为一个永远无法解决的挂起请求可能会阻塞应用的事件循环。
选择适合该任务的 RPC 方法也很重要。 一个常见的错误是,当应用程序仅需区块头时,却将“eth_getBlockByNumber”的完整交易标志设置为true。包含完整交易的响应数据量可能大几个数量级,不仅会消耗更多带宽,解析时间也会更长。同样,使用“eth_getLogs”时若指定过宽的区块范围,可能会返回海量数据集,导致节点和应用程序都不堪重负。将日志查询分页为较小的区块范围是标准做法。
HTTP 和 WebSocket RPC 请求之间有什么区别? RPC 请求通过几种不同的传输协议进行传输,选择合适的协议对延迟和效率有着重大影响。HTTP 采用请求-响应模型:您的应用建立连接,发送一个请求,获取一个响应,然后通信结束。WebSocket 则保持单个持久连接处于打开状态,因此节点可以在数据可用时立即将其推送至您的应用。gRPC 提供了一种高性能的二进制协议,适用于低延迟、高吞吐量的任务负载。
运输
最适合
连接
实时推送
HTTP(JSON-RPC)
单次读写
根据请求创建新实例(可池化)
不,你必须进行轮询
WebSocket
订阅与实时更新
单个持久连接
是的,服务器会推送数据
gRPC
高吞吐量、低延迟的处理管道
持久、多路复用
是的,流媒体
为什么 RPC 请求会失败或超时? 大多数 RPC 故障可归入以下几类。当请求次数超过配额时,速率限制会返回 HTTP 429 或 JSON-RPC 状态码 -32005,因此应稍作等待后再重试,而不是立即重试。当节点正在重启、同步或负载过高时,会返回 502 或 503 状态码。过大的查询,例如一个 eth_getLogs 跨数百万个区块的调用可能会因节点无法及时组装响应而超时。理解 RPC 速率限制 并将您的服务提供商与强大的 节点可靠性 这些做法使得此类故障很少发生,且能够得到修复。
如何加快 RPC 请求的速度? RPC 延迟是网络传输时间和节点处理时间的总和,这两者都是可以控制的。将请求路由到地理位置上靠近用户的节点,通过连接池和 HTTP/2 多路复用技术复用连接,将相关调用批量合并为单个请求,并缓存各块之间不会发生变化的数据。 选择最精简的方法也有助于提升性能:当您仅需区块头时,应请求区块头而非完整交易。如需了解导致 请求变慢的详细原因,请参阅“RPC 延迟的成因” ;或者,您也可以完全跳过调优步骤,直接使用全球分布式的Quicknode Core API 。
在什么情况下应该使用 RPC 而不是索引或流式处理? RPC 是进行点查询和写入操作的理想工具:例如查询单笔余额、读取单个合约值或广播一笔交易。但当需要处理大型历史数据集或聚合视图时,RPC 就会变得效率低下,因为从原始 RPC 调用中重建这些数据不仅速度慢,而且请求量巨大。对于分析性查询,带索引的数据集效率要高得多;而对于连续的实时数据,流式处理则能完全消除请求-响应的开销。 请参阅《RPC 与索引对比 》,了解如何在实时调用和预处理数据集之间进行选择。
Quicknode 如何优化 RPC 请求 Quicknode的核心 API 旨在让每次 RPC 请求都尽可能快速且可靠。该平台通过全球分布式基础设施,将每条请求路由到最近的可用节点,从而最大限度地缩短网络传输时间。Quicknode 的响应时间平均比竞争对手快 2.5 倍,并提供 99.99% 的正常运行时间服务水平协议 (SLA),确保您的应用程序的 RPC 调用无论流量大小如何,都能快速且稳定地完成。
除了标准的 JSON-RPC 之外,Quicknode 还提供了增强型 API 方法,可减少应用程序所需发出的请求数量。无需调用多个标准方法来重建钱包的完整代币持仓情况,只需一次增强型 API 调用,即可在单个响应中返回所有数据。Quicknode Streams Quicknode 更进一步,彻底摒弃了实时数据的请求-响应模式,在区块链事件发生时将其直接推送至您的应用程序或数据库。对于希望优化 RPC 使用效率的开发者, 发布了一份关于高效 RPC 调用的详细指南,涵盖分页、缓存、错误处理以及方法选择的最佳实践。
常见问题解答
在区块链中,RPC 代表什么? RPC 是“远程过程调用”(Remote Procedure Call)的缩写。这是一种模式,即您的应用程序调用在远程机器(在此情况下为区块链节点)上运行的函数,其操作方式如同调用本地函数一般。该节点会根据区块链的状态执行该过程,并返回结果。
什么是 JSON-RPC? JSON-RPC 是大多数区块链用于 RPC 的轻量级协议。请求和响应均为纯 JSON 对象。请求中指定了方法及其参数,而响应则包含结果或错误,并通过一个共享的 ID 与请求进行匹配。
RPC 请求和 API 调用是一回事吗? 这是一种特殊的 API 调用方式。一般的 REST API 会在不同的 URL 上提供资源,而区块链 RPC API 则在单一的endpoint URL 上提供方法,并通过请求正文中的方法名来选择操作。其请求-响应的往返机制与 REST API 相同。
一个 RPC 请求需要多长时间? 针对附近一个资源充足的节点进行的简单读取操作,通常在几十毫秒内即可完成。而更耗时的调用(例如大规模日志查询或完整区块获取)则需要更长时间,因为节点在响应之前需要汇集并序列化更多数据。
RPC 节点与 RPCendpoint 之间有什么区别? RPC 节点是指运行中的服务器,它存储区块链数据并处理请求。RPCendpoint 是您的应用程序发送请求的目标 URL,该 URL 会将请求路由到其后方的一个或多个节点。有关底层基础设施,请参阅“什么是区块链节点” 。
延伸阅读 // Tags
RPC 请求 JSON-RPC 区块链 API 调用
// Publisher
Quicknode
更新于2026年6月3日
2026年2月3日 — 阅读时间10分钟