#tokio #async #zeroconf #bonjour #dnssd

async-zeroconf

为使用 Tokio 而封装 Zeroconf 实现的异步库

4 个版本

0.2.2 2021 年 9 月 15 日
0.2.1 2021 年 9 月 7 日
0.2.0 2021 年 9 月 6 日
0.1.0 2021 年 8 月 27 日

#160 in macOS 和 iOS API


2 crates 中使用

MIT/Apache

79KB
1.5K SLoC

async-zeroconf

async-zeroconf 是一个用于注册 ZeroConf 服务的 crate,它通过 Tokio 而不是同步事件循环来保持服务存活。

示例

发布服务

#[tokio::main]
async fn main() -> Result<(), async_zeroconf::ZeroconfError> {
    // Create a service description
    let service = async_zeroconf::Service::new("Server", "_http._tcp", 80);
    // Publish the service
    let service_ref = service.publish().await?;
    // Service kept alive until service_ref dropped
    Ok(())
}

查找服务

#[tokio::main]
async fn main() -> Result<(), async_zeroconf::ZeroconfError> {
    let mut browser = async_zeroconf::ServiceBrowserBuilder::new("_http._tcp");
    let mut services = browser
        .timeout(tokio::time::Duration::from_secs(2))
        .browse()?;

    while let Some(Ok(v)) = services.recv().await {
        println!("Service = {}", v);
    }
    Ok(())
}

解析服务

#[tokio::main]
async fn main() -> Result<(), async_zeroconf::ZeroconfError> {
    let mut browser = async_zeroconf::ServiceBrowserBuilder::new("_http._tcp");
    let mut services = browser
        .timeout(tokio::time::Duration::from_secs(2))
        .browse()?;

    while let Some(Ok(v)) = services.recv().await {
        let resolved_service = async_zeroconf::ServiceResolver::r(&v).await?;
        println!("Service = {}", resolved_service);
    }
    Ok(())
}

变更日志

  • 0.2.2
    • Service 上添加对 host/txt 的访问器
  • 0.2.1
    • 修复与 C 类型相关的次要问题
  • 0.2.0
    • 修复发布服务时错误的问题
    • publish 现在是一个异步函数,因为它等待错误
  • 0.1.0
    • 初始版本

许可证

async-zeroconf 可以根据 MIT 许可证或 Apache 2.0 许可证进行许可。

依赖项

~3–14MB
~165K SLoC