> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 实时数据源

对于许多用例,开发者和用户可以通过 JSON-RPC 接口访问 Monad 区块链的当前和历史数据。

然而,这不是接收最新区块数据的最有效方式。传统的 JSON-RPC 访问方法使用请求/响应模型(需要轮询),而不是通知模型,后者会在有新更新时立即推送给您。

<Warning>
  因为 Monad 区块链比其他 EVM 兼容的 L1 区块链快得多,如果您消费 *大量* 数据,传统的 JSON-RPC 方法可能无法提供足够的性能,即使它们在其他 EVM 生态系统中对您有效。下一节将详细解释原因。
</Warning>

## 为什么我可能需要实时数据,即使以前不需要?

Monad 是一个能够每秒处理数千笔交易的快速区块链:当 Monad 生态系统以峰值速率运行时,每秒的数据量比其他 L1 EVM 兼容区块链(如主网以太坊)多得多。

原始以太坊的数据生态系统是围绕运行速度低于 100 TPS 的网络演变的,因此当数据量增加近 100 倍时,某些在那里有效的数据查询模式可能无法表现得足够好。

一个经典的例子是索引器工作流,即使用 [`eth_getLogs`](/zh/reference/json-rpc/api#eth_getlogs) 等 JSON-RPC 方法获取区块中每笔交易和每条日志的数据。一个典型的以太坊区块中会有数百笔交易,大约每 12 秒会有一个新区块。对于 Monad,每秒有 2.5 个区块,每个区块可以包含数千笔交易。

`eth_getLogs` 请求的数量将近增加 100 倍,给 JSON-RPC 服务提供者带来压力。使用实时数据服务可以有所帮助。这些服务在其他 EVM 区块链上也存在,但在 Monad 的更多情况下都是必需的。

## 如何接收实时数据?

Monad 目前提供三种实时数据源,它们在延迟与复杂性之间提供不同的权衡。

### 来源 #1:Geth 兼容的实时事件

这是一个源自 Geth 以太坊客户端但被其他 EVM 兼容区块链广泛支持的[基于 WebSocket 的协议](https://geth.ethereum.org/docs/interacting-with-geth/rpc/pubsub)。Monad 实现了 `eth_subscribe` 方法以及 `newHeads` 和 `logs` 订阅类型。不支持 `syncing` 和 `newPendingTransactions` 订阅类型。

此实时数据源由 Monad RPC 服务器组件发布。

### 来源 #2:Monad 对 Geth 实时事件的扩展

Monad RPC 服务器还提供对 Geth 协议的扩展;它提供名为 `monadNewHeads` 和 `monadLogs` 的 `eth_subscribe` 订阅。它们发布的数据与 Geth 实时事件协议几乎相同,但包含额外的数据用于跟踪每个区块通过共识的进展。

这要求用户理解推测性执行以及[它如何影响实时数据](/zh/monad-arch/realtime-data/spec-realtime)。您可以在 [WebSocket 订阅](/zh/reference/json-rpc/overview#speculative-subscription-behavior)中阅读更多关于这些订阅的信息。

### 来源 #3:执行事件 SDK

这是消费实时数据的最快方式。它要求您使用 Monad 客户端 SDK 在 C、C++ 或 Rust 中编写自己的实时数据处理软件——然后与您自己的 Monad 节点一起运行。

这是驱动其他两种访问方法的数据源:RPC 服务器本身正在监听它以创建 WebSocket 数据源。它有自己的[文档](/zh/execution-events)。

## 数据产品比较

| 数据产品                  | 如何消费                                                                 | 由谁发布    | 粒度   | 交易级信息        | 数据何时发布                            |
| --------------------- | -------------------------------------------------------------------- | ------- | ---- | ------------ | --------------------------------- |
| Geth 实时事件             | [WebSocket](/zh/reference/json-rpc/overview#websocket-subscriptions) | RPC 服务器 | 区块提交 | 仅日志          | 当区块达到 `Proposed` 状态时              |
| Geth 实时事件(带 Monad 扩展) | [WebSocket](/zh/reference/json-rpc/overview#websocket-subscriptions) | RPC 服务器 | 区块提交 | 仅日志          | 当区块达到 `Proposed` 状态时,后续的提交状态更新也可用 |
| 执行事件 SDK              | C/C++ 或 Rust SDK                                                     | 执行守护进程  | 交易提交 | 日志、调用帧、状态读/写 | 一收到提案立即发布                         |

前两个产品通过 WebSocket 使用 `eth_subscribe` 方法消费。如果您不希望运行自己的 Monad 节点,可以从第三方数据提供商处获得。

SDK 产品要求您使用 C/C++ 或 Rust SDK 编写自己的第三方程序。这些程序不是运行在节点软件内的插件——它们是完全由您编写的独立程序。当事件在 EVM(在执行守护进程中)内部发生时,它们被记录到共享内存中。您的程序也在读取同一共享内存。因此,您的程序必须在与 Monad 节点相同的主机上运行。
