摘要
Solana 公共 RPC 端点允许您查询网络,而无需运行自己的验证器。本文比较了默认公共端点与 OnFinality 等托管选项,解释了速率限制和可靠性权衡,并展示了如何通过 HTTP 和 WebSocket 连接以用于生产应用程序。
Solana 是最快的区块链之一,但其性能取决于您使用的 RPC 端点。如果您正在构建 dApp、交易机器人或索引器,您选择的公共端点会影响延迟、可靠性以及您可以发送的请求数量。
本文解释了什么是 Solana 公共 RPC 端点,比较了默认端点与托管选项,并帮助您决定哪个适合您的工作负载。
快速建议:何时使用哪个端点
如果您正在原型设计或运行低流量脚本,默认公共端点(api.mainnet-beta.solana.com)就足够了。它是免费的,无需设置。
但如果您的应用程序已投入生产、处理用户流量或需要一致的性能,您应该使用像 OnFinality 这样的托管 RPC 提供商。公共端点是共享的,并且通常受到速率限制,这可能导致在高使用率期间出现节流或停机。
以下是一个简单的决策指南:
- 学习或测试:使用默认公共端点。
- 构建生产 dApp:使用具有服务级别协议和更高吞吐量的托管端点。
- 需要 WebSocket 订阅:确保提供商支持
wss://并提供可靠的发布/订阅。 - 高请求量:考虑使用专用节点以避免共享速率限制。
对于生产环境,我们建议从 OnFinality 的 Solana 端点开始,该端点专为可靠性和可扩展性而设计。
什么是 Solana 公共 RPC 端点?
公共 RPC 端点是一个 URL,允许您向 Solana 网络发送 JSON-RPC 请求。它充当您的应用程序与区块链之间的网关,允许您读取账户数据、提交交易以及订阅事件。
Solana 的官方公共端点是 https://api.mainnet-beta.solana.com。它由 Solana 基金会运营,并且免费使用。但是,它由许多开发人员共享,因此具有速率限制,并且在拥塞期间可能会变慢。
存在其他公共端点,但它们通常具有类似的限制。例如,一些社区运行的端点可能提供更高的限制,但没有保证。
托管 RPC 提供商(例如 OnFinality)提供的公共端点更加可靠和可扩展。它们通常提供更高的速率限制、多个区域和更好的正常运行时间。
Solana 公共 RPC 端点比较
下表将默认公共端点与托管选项进行了比较。请注意,确切的限制和性能会有所不同,因此请将其视为一般指南。
| 端点 | 类型 | 速率限制 | 可靠性 | 最适合 |
|---|---|---|---|---|
https://api.mainnet-beta.solana.com | 官方公共 | 低(共享) | 可变 | 原型设计、低流量 |
| OnFinality 公共端点 | 托管公共 | 更高,可配置 | 高 | 生产应用程序、中等流量 |
| OnFinality 专用节点 | 专用 | 自定义,无共享限制 | 非常高 | 高吞吐量、生产应用程序 |
OnFinality 的公共端点是 https://solana.api.onfinality.io/public(HTTP)和 wss://solana.api.onfinality.io/public-ws(WebSocket)。这些端点由全球基础设施支持,可平衡负载并提供故障转移。
如何连接到 Solana 公共 RPC 端点
连接到 Solana RPC 端点很简单。您可以使用 curl 进行快速测试,或使用像 @solana/web3.js 这样的 JavaScript 库来构建应用程序。
使用 curl
要检查当前 slot(最新区块高度),请发送 JSON-RPC 请求:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
您应该会收到类似以下的响应:
{"jsonrpc":"2.0","result":123456789,"id":1}
使用 @solana/web3.js
安装库并设置连接:
import { Connection, clusterApiUrl } from '@solana/web3.js';
// 使用公共端点
const endpoint = 'https://solana.api.onfinality.io/public';
const connection = new Connection(endpoint, 'confirmed');
async function getSlot() {
const slot = await connection.getSlot();
console.log('当前 slot:', slot);
}
getSlot();
对于 WebSocket 订阅,请使用 wss:// 端点:
const wsEndpoint = 'wss://solana.api.onfinality.io/public-ws';
const connection = new Connection(wsEndpoint, 'confirmed');
速率限制和可靠性:预期情况
公共 RPC 端点是共享资源。Solana 基金会的端点具有速率限制,每个 IP 每秒可能低至 40 个请求,但这些限制没有官方文档记录,并且可能会发生变化。在网络拥塞期间,您可能会遇到节流或超时。
像 OnFinality 这样的托管提供商提供更慷慨的限制和更好的可靠性。它们使用负载平衡和多个节点来分配流量,从而降低单点故障的风险。
如果您的应用程序需要一致的性能,请考虑使用专用节点。使用专用节点,您可以独占访问基础设施,从而消除共享速率限制并提供可预测的性能。
WebSocket 支持和实时数据
Solana dApp 通常需要实时更新,例如账户更改或新交易。WebSocket 订阅允许您无需轮询即可接收这些更新。
OnFinality 的公共端点支持 WebSocket,地址为 wss://solana.api.onfinality.io/public-ws。您可以订阅账户更改、程序日志和 slot 更新。
使用 @solana/web3.js 的订阅示例:
const subscriptionId = connection.onAccountChange(
publicKey,
(accountInfo) => {
console.log('账户已更改:', accountInfo);
},
'confirmed'
);
使用公共端点时,请注意 WebSocket 连接可能受到限制或不稳定。托管提供商通常提供更强大的 WebSocket 基础设施。
公共端点的常见陷阱
即使使用良好的端点,您也可能会遇到问题。以下是一些常见陷阱以及如何避免它们:
- 速率限制:公共端点会限制请求。使用缓存和批处理来减少调用次数。
- 超时:长时间运行的查询(如
getProgramAccounts)可能会超时。使用分页或在链上过滤。 - 过时数据:确保您使用正确的提交级别(
processed、confirmed或finalized)。 - WebSocket 断开:公共 WebSocket 端点可能会断开连接。实现重新连接逻辑。
如果您经常遇到问题,可能是时候切换到托管提供商了。
何时从公共 RPC 迁移到托管 RPC
如果您的应用程序正在增长,您最终将超出公共端点的能力。迹象包括:
- 频繁的 429 错误(超出速率限制)
- 高峰时段的高延迟
- 停机或连接重置
- 需要归档数据或高级方法
像 OnFinality 这样的托管提供商提供:
- 更高的速率限制和可配置的计划
- 全球基础设施,低延迟
- 专用节点,实现最大性能
- 支持,用于生产问题
查看 RPC 定价 以了解适合您需求的计划。
关键要点
- Solana 公共 RPC 端点是免费的,但共享,导致速率限制和可靠性问题。
- 对于生产应用程序,请使用像 OnFinality 这样的托管提供商以获得更好的性能和支持。
- OnFinality 提供 HTTP 和 WebSocket 端点:
https://solana.api.onfinality.io/public和wss://solana.api.onfinality.io/public-ws。 - WebSocket 订阅对于实时 dApp 至关重要;确保您的提供商支持它们。
- 监控您的使用情况,如果您需要一致的吞吐量,请切换到专用节点。
常见问题解答
默认的 Solana 公共 RPC 端点是什么?
默认公共端点是 https://api.mainnet-beta.solana.com,由 Solana 基金会运营。它是免费的,但有速率限制。
Solana 公共 RPC 端点对生产环境可靠吗?
由于速率限制和潜在的停机,通常不建议将公共端点用于生产环境。托管提供商提供更高的可靠性。
如何获取 Solana 公共 RPC 端点?
您可以使用默认端点,或注册像 OnFinality 这样的托管提供商以获取专用的公共端点。
HTTP 和 WebSocket RPC 有什么区别?
HTTP 用于请求-响应调用,而 WebSocket 允许实时订阅。对于实时更新,请使用 WebSocket。
我可以免费使用 OnFinality 的 Solana 公共端点吗?
OnFinality 为公共端点提供免费层。查看 RPC 定价 了解详情。
如何在公共和专用 RPC 之间选择?
如果您需要高吞吐量和一致的性能,请选择专用节点。对于中等流量,托管公共端点可能就足够了。
有关更多信息,请访问 Solana 网络页面 并探索 支持的 RPC 网络。