Skip to content

Pooling

Concurrent request execution has been moved to its own dedicated package at packages/http-pool. This separation keeps the core HTTP client focused on single-request transport while giving the pooling layer its own lifecycle and dependencies.

Where to Find Pooling

The pooling API is provided by the http-pool package. The key types are:

Type Namespace Role
HttpPool Cognesy\HttpPool Executes a batch of requests concurrently
PendingHttpPool Cognesy\HttpPool Deferred pool execution wrapper
HttpPoolBuilder Cognesy\HttpPool\Creation Builder for constructing pool instances

Refer to packages/http-pool/docs/ for full documentation on configuring concurrency limits, handling per-request errors, and collecting results.

Collection Types

The request and response collection types remain in the http-client package since they are useful beyond pooling:

HttpRequestList

A typed, immutable collection of HttpRequest objects:

use Cognesy\Http\Collections\HttpRequestList;
use Cognesy\Http\Data\HttpRequest;

$requests = HttpRequestList::of(
    new HttpRequest(url: 'https://api.example.com/a', method: 'GET', headers: [], body: '', options: []),
    new HttpRequest(url: 'https://api.example.com/b', method: 'GET', headers: [], body: '', options: []),
);

// Access methods
$requests->count();    // 2
$requests->first();    // First HttpRequest
$requests->last();     // Last HttpRequest
$requests->isEmpty();  // false
$requests->all();      // Array of all requests

// Immutable mutation
$requests = $requests->withAppended($newRequest);
$requests = $requests->filter(fn($r) => $r->method() === 'POST');

HttpResponseList

A typed, immutable collection of Result objects, where each result wraps either a successful HttpResponse or an error:

use Cognesy\Http\Collections\HttpResponseList;

// After pool execution, you get an HttpResponseList
$responses->count();          // Total results
$responses->successful();     // Array of HttpResponse objects
$responses->failed();         // Array of error values
$responses->hasFailures();    // true if any request failed
$responses->successCount();   // Number of successful responses
$responses->failureCount();   // Number of failed responses

This design lets you handle partial failures gracefully -- some requests in a batch may succeed while others fail, and you can inspect each result independently.