workerman/psr7
PSR-7 HTTP message implementation for Workerman, offering interoperable request and response objects for middleware-friendly PHP services on the Workerman event loop. Lightweight and easy to integrate into existing Workerman HTTP applications.
Architecture fit
workerman/psr7 is one concrete implementation of psr/http-message. A Laravel application only touches PSR-7 at its edges — async HTTP clients, websocket/SSE adapters, or bridges to symfony/psr-http-message-bridge. Laravel's core request/response lifecycle is Symfony HttpFoundation, not PSR-7, so this package has no path into the framework itself.workerman/http-client (and the wider Workerman/webman ecosystem) pulls it in. It is plumbing, not a product decision. The 10-star count and single-digit opportunity score reflect that — nobody adopts this on merit; they inherit it.Request, Response, Stream, Uri) are internal to that ecosystem. If our code type-hints against them rather than Psr\Http\Message\*Interface, we've coupled to a library the maintainer can replace at will.Integration feasibility
composer require is trivial; the work is deciding whether we want a second PSR-7 implementation coexisting with guzzlehttp/psr7 (already present wherever Guzzle/Laravel's HTTP client is used). Two implementations are spec-compatible but instanceof-incompatible — a classic source of silent adapter bugs.walkor/psr7, Packagist package is workerman/psr7. Version constraints, security advisories, and GitHub watchlists all split across two identifiers. That's a supply-chain visibility gap, not a blocker.Technical risk
nyholm/psr7 (one of the fastest, best-maintained implementations). If it is a hard fork without an upstream-merge policy, PSR-7 spec updates, header-casing fixes, and CVEs land upstream and stop there. This needs verification — ask directly.Key questions
nyholm/psr7? Is there a documented upstream-merge or patch-porting process?workerman/http-client pin, and does it accept PSR-7 v2 (psr/http-message: ^1.0 || ^2.0) with the v2 return types?psr/http-factory)? Without them, interoperability with Laravel/Symfony tooling requires hand-written factories.walkor vendor name?composer why workerman/psr7)Stack fit
workerman/http-client for high-concurrency outbound calls. In that case it comes along and should be accepted, pinned, and isolated.nyholm/psr7 (lightweight, actively maintained, upstream of this) or guzzlehttp/psr7 (already in the tree, zero marginal risk).Migration path
Compatibility
guzzlehttp/psr7 is legal but requires discipline: never let concrete classes cross a boundary. Convert at the edges via symfony/psr-http-message-bridge or explicit factories.Sequencing
composer why / composer depends to establish whether it's transitive — resolve ambiguity before any design discussion.nyholm/psr7; file the upstream-merge question with the maintainer.nyholm/psr7").Maintenance
Support
Scaling
nyholm/psr7 on throughput. Scaling risk lives entirely in the Workerman runtime (event loop, worker counts, memory retention across coroutines), not here.Failure modes
instanceof and type-hint mismatches against guzzlehttp/psr7 surfaces as confusing runtime errors at integration points.nyholm/psr7 release notes, which nobody does.walkor/psr7 won't page anyone watching workerman/psr7.Ramp-up
Request/Response will instinctively mutate; that instinct is the source of most defects here.Walker\Psr7\* (or equivalent concrete namespace) outside the adapter package.Bottom line for the roadmap: do not plan around this package. Accept it as a pinned transitive dependency if Workerman async HTTP is on the roadmap, contain it behind interfaces, and treat nyholm/psr7 as the designed exit. If Workerman is not on the roadmap, this never enters the picture.
How can I help you explore Laravel packages today?