clue / mdns-react
简单、异步的多播DNS (mDNS) 解析器,用于零配置网络,基于ReactPHP构建。
Requires
- php: >=5.3
- clue/multicast-react: ~1.0|~0.2.0
- react/dns: ~0.4.0|~0.3.0
- react/event-loop: ~0.4.0|~0.3.0
- react/promise: ^2.1 || ^1.2.1
This package is auto-updated.
Last update: 2024-09-08 16:56:03 UTC
README
简单、异步的多播DNS (mDNS) 解析器,用于零配置网络,基于 ReactPHP 构建。
多播DNS 名称解析通常作为 零配置网络 的一部分使用。它被Mac OS X (Bonjour)、许多Linux发行版 (Avahi) 和许多其他网络设备(如打印机、相机等)用于将本地局域网客户端的主机名解析为IP地址。
此库实现了在 RFC 6762 中定义的mDNS协议。请注意,此协议与在 RFC 6763 中定义的基于DNS的服务发现 (DNS-SD) 相关,但独立于DNS。
目录
注意:此项目处于测试阶段!欢迎报告您遇到的问题。
快速入门示例
安装后,您可以使用以下代码查找本地域名地址
<?php require __DIR__ . '/vendor/autoload.php'; $factory = new Clue\React\Mdns\Factory(); $resolver = $factory->createResolver(); $resolver->resolve('hostname.local')->then(function ($ip) { echo 'Found: ' . $ip . PHP_EOL; }, function (Exception $e) { echo 'Error: ' . $e->getMessage() . PHP_EOL; });
另请参阅 示例。
用法
工厂
Factory
负责创建您的 Resolver
实例。
$factory = new Factory();
此类接受一个可选的 LoopInterface|null $loop
参数,可以用来将事件循环实例传递给此对象。您可以使用 null
值来使用 默认循环。除非您确定要显式使用给定的事件循环实例,否则不应提供此值。
createResolver()
可以使用 createResolver()
方法创建一个mDNS解析器实例,该实例发送多播DNS查询并等待传入的单播DNS响应。它返回一个 Resolver
实例。
$resolver = $factory->createResolver();
解析器
Factory
创建来自 react/dns 包的 React\Dns\Resolver\Resolver
类的实例。
虽然ReactPHP的正常DNS解析器使用单播UDP消息(和TCP流)查询给定的名称服务器,但此解析器实例使用多播UDP消息查询您网络中所有可到达的主机。
承诺
查询是异步的(非阻塞的),因此您实际上可以并行发送多个DNS查询。mDNS主机将对每个DNS查询消息响应一个DNS响应消息。顺序没有保证。查询使用基于 Promise 的接口,这使得在查询 fulfilled(即成功解析或因错误被拒绝)时做出反应变得容易。
$resolver->resolve($hostname)->then( function ($ip) { // IP successfully resolved }, function (Exception $e) { // an error occurred while looking up the given hostname } });
有关更多详细信息,请参阅 DNS 文档。
阻塞
如上所述,此库默认提供强大、异步的API。
然而,如果您想将其集成到传统的阻塞环境中,您还应该考虑使用 clue/reactphp-block。
生成的阻塞代码可能看起来像这样
<?php require __DIR__ . '/vendor/autoload.php'; use Clue\React\Block; $factory = new Clue\React\Mdns\Factory(); $resolver = $factory->createResolver(); $promise = $resolver->resolve('me.local'); try { $ip = Block\await($promise, $loop); // IP successfully resolved } catch (Exception $e) { // an error occurred while performing the request }
同样,您也可以并发处理多个查找,并等待结果数组
$promises = array( $resolver->resolve('first.local'), $resolver->resolve('second.local'), ); $ips = Block\awaitAll($promises, $loop);
有关更多详细信息,请参阅 clue/reactphp-block。
安装
安装此库的推荐方法是 通过Composer。 您是Composer的新手吗?
composer require clue/mdns-react:~0.2.0
有关版本升级的详细信息,请参阅 CHANGELOG。
该项目旨在在所有平台上运行,因此不需要任何PHP扩展,并支持从旧版PHP 5.3到当前PHP 8+和HHVM的运行。强烈建议使用此项目的最新支持的PHP版本。
测试
要运行测试套件,您首先需要克隆此仓库,然后通过Composer安装所有依赖项 通过Composer
composer install
要运行测试套件,请转到项目根目录并运行
vendor/bin/phpunit
许可证
本项目以宽松的 MIT许可证 发布。
您知道吗?我提供定制开发服务,并为发布和贡献发行发票。有关详细信息,请联系我(@clue)。
更多
- 多播DNS在 RFC 6762 中定义,特别是此规范还突出了与正常DNS操作的区别 。
- 有关正常DNS操作的更多详细信息,请参阅 react/dns组件。