Allow Connector to have no Resolver
stivni opened this issue · 6 comments
...so I can connect to an ip address if I do something locally
It is already possible to call createSocketForAddress
with the desired ip address, but it doesn't feel right that I need a dns resolver for that. One solution would be to have a resolving connector and non resolving connector. Or are there other suggestions?
I'm willing to try something in code if I know what the opinions are...
See #7. The API of the PR is good but see my comment about a Null pattern instead of an exception. Unfortunately the submitter hasn't commented or updated the request.
I get the Null pattern thing, but isn't it always the case, if your hostname is an ip address, that we don't need the call a dns server? This means that we could include this behaviour in the Resolver itself.
It still is the case the some people would not want a Resolver if they're absolutely sure they will be working with ip addresses, but for me that not really an issue for now...
Ah, I think I see now. This issue belongs in reactphp/dns in that case.
Allow Connector to have no Resolver
Big 👍 on the idea, makes perfect sense! Resolving this ticket is also a requisite for using this component as part of the DNS component (reactphp/dns#19).
One solution would be to have a resolving connector and non resolving connector. Or are there other suggestions?
Yes, this would be one possible solution. Would you care to file a PR to see how this works out? See also #7 and @cboden's suggestion for an alternative implementation.
[…] see my comment about a Null pattern instead of an exception.
Indeed, this has been raised several times already. I've filed a relevant feature request ticket in the DNS component to keep track of this: reactphp/dns#17
[…] if your hostname is an ip address, that we don't need the call a dns server? This means that we could include this behaviour in the Resolver itself.
Nice suggestion, makes perfect sense! I've filed a relevant feature request ticket in the DNS component to keep track of this: reactphp/dns#18
Thanks for discussing these concepts so far!
Allow Connector to have no Resolver
As an alternative to a NullResolver
, we can also split our Connector
into a TcpConnector($loop)
and a ResolvingConnector($tcpConnector, $resolver)
. IMO this is a more SOLID design, however it's even more cumbersome to work with from an API consumer standpoint:
$loop = React\EventLoop\Factory::create();
$resolverFactory = new React\Dns\Resolver\Factory();
$resolver = $resolverFactory->create('8.8.8.8', $loop);
$tcp = new TcpConnector($loop);
$resolving = new ResolvingConnector($resolver, $tcp);
$secure = new SecureConnector($resolving, $loop);
$secure->create('www.google.com', 443);
Just putting this out here. I think it might still be worth implementing, should we consider providing a simpler facade API (see #38). The resulting API could eventually looks like this:
$loop = React\EventLoop\Factory::create();
$facade = …; // not decided yet, but should probably be a single call (see #38)
$facade->createConnection('tls://www.google.com:443');