tourze / workerman-dns-client
DNS Query Client in Workerman
0.0.1
2025-04-05 18:18 UTC
Requires
- php: ^8.1
- react/dns: ^1.13
- symfony/cache: ^6.4
- workerman/workerman: ^5.1
Requires (Dev)
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-04-05 18:20:49 UTC
README
基于 Workerman 的 DNS 客户端,用于解析 DNS 域名,并提供支持自定义 DNS 解析的 TCP 连接。
安装
composer require tourze/workerman-dns-client
功能
- 支持使用自定义 DNS 服务器进行 DNS 查询
- 提供缓存机制避免重复查询
- 扩展了 AsyncTcpConnection,支持使用自定义 DNS 解析
基本用法
DNS 查询
use React\Dns\Model\Message; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Tourze\Workerman\DnsClient\DnsQuery; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->onWorkerStart = function() { // 创建缓存 $cache = new ArrayAdapter(); // 创建DNS查询 $query = new DnsQuery( $cache, // 缓存适配器 'example.com', // 要查询的域名 Message::TYPE_A, // 查询类型 (A记录) '8.8.8.8', // DNS服务器IP (此处使用Google DNS) 53 // DNS服务器端口 ); // 解析IP $query->resolveIP( function($ip) { echo "解析成功: $ip\n"; }, function() { echo "解析失败\n"; } ); }; Worker::runAll();
使用自定义DNS解析的AsyncTcpConnection
use Symfony\Component\Cache\Adapter\ArrayAdapter; use Tourze\Workerman\DnsClient\DnsAsyncTcpConnection; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->onWorkerStart = function() { // 初始化DNS缓存 DnsAsyncTcpConnection::initDnsCache(new ArrayAdapter()); // 创建连接 $connection = new DnsAsyncTcpConnection('ws://example.com:8080'); // 设置DNS服务器 (可选) $connection->setDnsServer('1.1.1.1', 53); // 连接事件 $connection->onConnect = function($connection) { echo "连接成功\n"; $connection->send('hello'); }; $connection->onMessage = function($connection, $data) { echo "收到消息: $data\n"; }; $connection->onError = function($connection, $code, $msg) { echo "错误: $code $msg\n"; }; $connection->onClose = function($connection) { echo "连接关闭\n"; }; // 建立连接 $connection->connect(); }; Worker::runAll();
高级用法
强制使用DNS解析
即使是IP地址也可以强制使用DNS解析(在某些特殊场景下可能需要):
$connection = new DnsAsyncTcpConnection('ws://192.168.1.1:8080'); $connection->forceDnsLookup(true);
使用不同的缓存适配器
use Symfony\Component\Cache\Adapter\FilesystemAdapter; // 使用文件缓存 $cache = new FilesystemAdapter('dns', 300, '/tmp/dns-cache'); DnsAsyncTcpConnection::initDnsCache($cache);