Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
82 lines (49 sloc) 2.24 KB

React Adapter

An HTTPlug adapter for the React Http client.

Installation

Use Composer_ to install the React adapter. It will also install React as it's a dependency.

$ composer require php-http/react-adapter

Usage

The React client adapter needs a :ref:`message factory <message-factory>` in order to to work:

use Http\Adapter\React\Client;

$client = new Client($messageFactory);

For simplicity, all required objects are instantiated automatically if not explicitly specified:

ReactEventLoopLoopInterface:The event loop used inside the React engine.
ReactHttpClientClient:The HTTP client instance that must be adapted.

If you need more control on the React instances, you can inject them during initialization:

use Http\Adapter\React\Client;

$eventLoop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dnsResolver = $dnsResolverFactory->createCached('8.8.8.8', $loop);

$factory = new React\HttpClient\Factory();
$reactHttp = $factory->create($loop, $dnsResolver);

$adapter = new Client($messageFactory, $eventLoop, $reactHttp);

If you choose to inject a custom React HTTP client, you must inject the loop used during its construction. But if you already use an EventLoop inside your code, you can inject only this object.

You can also use a ReactFactory in order to initialize React instances:

use Http\Adapter\React\ReactFactory;

$eventLoop = ReactFactory::buildEventLoop();
$reactHttp = ReactFactory::buildHttpClient($eventLoop);

Then you can use the adapter to send synchronous requests:

use GuzzleHttp\Psr7\Request;

$request = new Request('GET', 'http://httpbin.org');

// Returns a Psr\Http\Message\ResponseInterface
$response = $adapter->sendRequest($request);

Or send asynchronous ones:

use GuzzleHttp\Psr7\Request;

$request = new Request('GET', 'http://httpbin.org');

// Returns a Http\Promise\Promise
$promise = $adapter->sendAsyncRequest(request);