#provider #response #web3 #fastest #time #dynamically #times

web3_closest_provider

一个基于响应时间动态选择最快Web3提供商的库

1 个稳定版本

1.0.0 2024年2月26日

#11#最快

MIT 协议

22KB
216

在Rust中获取最近的Web3 RPC提供商

Rust CI

简介

厌倦了手动切换Web3 RPC提供商以找到最快的?这个库通过根据其响应时间自动在你的选择之间进行负载均衡来消除这种烦恼。只需提供潜在提供商的列表,该库就会动态选择最适合您本地设置的选项,确保Web3应用程序的性能最佳。

主要功能

  • 自动响应时间检查:该库定期检查您列表中每个提供商的响应时间,使您的选择保持最新。
  • 动态选择:根据最新的响应时间,库无缝选择最快的提供商,确保您始终使用最佳选项。
  • 易于集成:使用其直观的API,快速轻松地将此库集成到您的Web3应用程序中。
  • 可定制间隔:调整响应时间检查的频率以适应您特定的需求和网络条件。
  • 清晰的通信:库记录有关所选提供商和遇到的错误的信息,让您保持知情。

安装

使用Cargo

  1. web3_closest_provider = "1.0.0" 添加到您的 Cargo.toml 依赖项。
  2. 运行 cargo install web3_closest_provider

使用方法

  1. 导入库
use web3_closest_provider::{ClosestWeb3Provider, ClosestWeb3RpcProviderSelector};
  1. 创建潜在提供商的列表
let providers = vec![
    "[https://mainnet.infura.io/v3/your_api_key](https://mainnet.infura.io/v3/your_api_key)".to_string(),
    "[https://rpc.ankr.com/eth](https://rpc.ankr.com/eth)".to_string(),
    "[https://api.mycryptoapi.com/v1/eth](https://api.mycryptoapi.com/v1/eth)".to_string(),
];
  1. 初始化负载均衡器
let balancer = ClosestWeb3RpcProviderSelector::init(providers.clone(), std::time::Duration::from_secs(10));
  1. 检查均衡器是否就绪
if balancer.is_ready() {
    println!("Balancer is ready to use!");
} else {
    balancer.wait_until_ready().await;
    println!("Balancer is ready to use!");
}
  1. 获取最快提供商的URL
let fastest_provider = balancer.get_fastest_provider();
println!("Fastest provider: {}", fastest_provider);

// ... use the fastest provider for your Web3 operations ...
  1. 关键的是,记得在完成时总是销毁均衡器
balancer.destroy(); // **This step is essential!**

自定义

  • 您可以通过更改interval_duration来调整响应时间检查的频率。
  • 您可以实现除响应时间之外特定检查或逻辑来选择提供商。

示例使用

use web3_closest_provider::{ClosestWeb3Provider, ClosestWeb3RpcProviderSelector};
use std::time::Duration;

#[tokio::main]
async fn main() {
    let providers = vec![
        "[https://mainnet.infura.io/v3/your_api_key](https://mainnet.infura.io/v3/your_api_key)".to_string(),
        "[https://rpc.ankr.com/eth](https://rpc.ankr.com/eth)".to_string(),
        "[https://api.mycryptoapi.com/v1/eth](https://api.mycryptoapi.com/v1/eth)".to_string(),
    ];

    let balancer = ClosestWeb3RpcProviderSelector::init(providers.clone(), Duration::from_secs(10));

    balancer.wait_until_ready().await;
    let fastest_provider = balancer.get_fastest_provider();
    println!("Using fastest provider: {}", fastest_provider);

    // ... use the fastest provider for your Web3 operations ...

    // **Remember to destroy the balancer!**
    balancer.destroy();
}

贡献

我们欢迎贡献!请参阅CONTRIBUTING.md文件以获取指南。

许可证

本库采用MIT许可证。有关详细信息,请参阅LICENSE文件。

依赖项

~6–19MB
~282K SLoC