3个不稳定版本
| 0.2.0 | 2020年12月18日 |
|---|---|
| 0.1.1 | 2020年12月18日 |
| 0.1.0 | 2020年12月18日 |
3 在 #srv 中
每月47次 下载
50KB
913 行
srv-rs
SRV记录定位的服务的Rust客户端。
简介
SRV记录,如RFC 2782中定义,是以下形式的DNS记录:
_Service._Proto.NameTTLClassSRV优先级 权重 端口 目标
例如,一个DNS服务器可能会为以下SRV记录响应 _http._tcp.example.com
_http._tcp.example.com. 60 IN SRV 1 100 443 test1.example.com.
_http._tcp.example.com. 60 IN SRV 2 50 443 test2.example.com.
_http._tcp.example.com. 60 IN SRV 2 50 443 test3.example.com.
想要与这个示例服务通信的客户端将首先尝试与 test1.example.com:443 (具有最低优先级的记录) 进行通信,然后是其他两个(由于它们具有相同的优先级,因此以随机顺序),如果第一个不可用。
srv-rs 处理SRV记录的查找和缓存以及按顺序选择用于与SRV定位的服务通信的目标。它通过以下接口提供此服务
use srv_rs::{SrvClient, Execution, resolver::libresolv::LibResolv};
let client = SrvClient::<LibResolv>::new("_http._tcp.example.com");
client.execute(Execution::Serial, |address: http::Uri| async move {
// Communicate with the service at `address`
// `hyper` is used here as an example, but it is in no way required
hyper::Client::new().get(address).await
})
.await;
SrvClient::new 创建一个客户端(应该重复使用以利用缓存)以与 _http._tcp.example.com 定位的服务进行通信。 SrvClient::execute 接受一个产生未来的闭包(模拟当前不稳定的异步闭包)并在解析自发现的SRV记录的一系列目标上执行闭包,在获取第一个 Ok 或最后一个 Err 时停止并返回。
替代解析器和目标选择策略
srv-rs 提供了多个解析后端以支持 SRV 查找,默认使用一种目标选择策略,该策略对最后一次成功使用的目标保持亲和性。这两种行为都可以通过实现 SrvResolver 和 Policy 特性来改变。
提供的解析后端由以下功能启用
libresolv(通过LibResolv)trust-dns(通过trust_dns_resolver::AsyncResolver)
使用方法
将 srv-rs 添加到 Cargo.toml 的依赖中,启用至少一个 DNS 解析后端(见 替代解析器)。这里以 libresolv 为例启用,但并非必须。
[dependencies]
srv-rs = { version = "0.2.0", features = ["libresolv"] }
贡献
- 克隆仓库
- 进行一些更改
- 测试:
cargo test --all-features - 格式化:
cargo fmt - Clippy:
cargo clippy --all-features --tests -- -Dclippy::all - Bench:
cargo bench --all-features - 如果修改了 crate 级别的文档(
src/lib.rs)或README.tpl,请更新README.mdcargo安装 cargo-readmecargo readme > README.md
历史
该项目由 D. E. Shaw group 贡献给了社区。
依赖关系
~2–3.5MB
~69K SLoC