roadrunner/http-bundle
RoadRunner HTTP Bundle integrates RoadRunner’s high-performance HTTP server with Symfony, bridging PSR-7 requests through long-running workers for faster, more efficient PHP request handling.
Architecture fit
roadrunner/http-bundle is a Symfony bundle (roadrunner-symfony/http-bundle) that adapts RoadRunner's PSR-7 request/response model to Symfony's HttpKernel. It has no Laravel service provider, no config/ publishables, and no Octane-compatible worker hooks. Treating it as a Laravel dependency is a category error.rr binary, one .rr.yaml operational model, consistent worker semantics across frameworks.Integration feasibility
rr binary, the .rr.yaml configuration, or the container/entrypoint changes. Real integration work is: install and pin the RoadRunner binary, author .rr.yaml (pool sizing, max_jobs, timeouts, static file policy), change the process entrypoint from php-fpm to rr serve, and add health/readiness endpoints.RoadRunner runtime that the bundle composes with; in Laravel you would be bypassing Octane's runtime entirely, which means inheriting the bundle's bootstrap assumptions rather than Laravel's.$_SERVER/$_FILES superglobal emulation has known edge cases.Technical risk
rr protocol drift is the most common breakage class and produces opaque failures at worker handshake time.Key questions
rr binary lifecycle (patching, CVE response, image rebuilds)?Stack fit
Migration path
.rr.yaml in version control, (3) container image gains rr and a new entrypoint, (4) health/readiness endpoints, (5) canary one low-risk service, (6) compare, then expand.Compatibility
rr independently of the bundle.Sequencing
Maintenance
rr binary becomes a versioned, patched artifact in every image. That is a recurring cost even when nothing in PHP changes..rr.yaml becomes a first-class config file with real blast radius (worker counts, timeouts, static file serving). It needs ownership, review, and environment parity — it is not a set-and-forget file.Support
dump/dd semantics, and stack traces that may terminate in the Go worker rather than in PHP. Expect a productivity dip and a support-desk knowledge gap during ramp-up.Scaling
pool.numWorkers per instance, sized to CPU. This is simpler and more predictable than php-fpm's process-per-request model and yields better memory density per unit of concurrency — the core economic argument.max_jobs) must be tuned to bound memory growth; without it, long-lived workers degrade until OOM.Failure modes
pool.allocate_timeout / request timeout configuration.max_jobs is the mitigation, not a fix.rr → handshake failures at startup, often with unhelpful errors.Ramp-up
rr binary..rr.yaml tuning, two-stream log correlation, and the persistent-worker programming discipline (no request state on singletons).How can I help you explore Laravel packages today?