Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Web Socket Bundle Laravel Package

gos/web-socket-bundle

A Symfony bundle for adding real-time WebSocket features to your app. It provides a Ratchet-based server, topic-based publish/subscribe, RPC, authentication, and Symfony service integration for easy bidirectional communication.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — low for a Laravel stack. The framing of this as a "Laravel/PHP package" is the first thing to correct: gos/web-socket-bundle is a Symfony bundle, not a framework-agnostic library. It ships a Bundle subclass, a DependencyInjection\Extension with a config tree, compiler passes, and event subscribers wired to the Symfony kernel lifecycle. None of that has a counterpart in Laravel. There is no service provider, no facade, no publishable config, and no artisan entrypoint — so "composer require and go" is not a path that exists. The runtime core is Ratchet (ReactPHP event loop) with a WAMP topic/session layer and an Autobahn.JS client, all of which are usable in principle from any PHP process but are packaged here specifically for Symfony's container and kernel semantics. The newly released v3.15.0 changes none of this — it is a single deprecation fix scoped to Symfony 6.1 command configuration, with no new abstractions, no framework-agnostic surface, and no Laravel affordance.

Integration feasibility — feasible only out-of-process or via a fork. Three realistic shapes:

  1. Sidecar service — deploy the bundle as a standalone Symfony microservice in its own container, talking WAMP to browsers and bridging to the Laravel app over Redis pub/sub or an internal HTTP broadcast endpoint. Keeps Laravel clean; costs a second framework, second deploy pipeline, and a second on-call surface.
  2. Fork-and-port — lift the Ratchet server, WAMP topic registry, and session handling out of the bundle and re-host them behind a Laravel service provider plus an websocket:serve command. I'd budget 3–6 weeks for a hardened version, and you own it permanently.
  3. Replace — use a Laravel-native transport instead: Laravel Reverb (first-party, Pusher protocol), Soketi, or Ratchet directly via cboden/ratchet with a custom command. This is the recommendation unless WAMP's RPC-over-socket semantics are a hard product requirement.

Technical risk — high, marginally reduced but not resolved. v3.15.0 is the first release since 2022-09-20, and it is a one-line fix for a Symfony 6.1 deprecation. It is a genuine positive signal — the maintainer is still reachable and the package is not formally abandoned — but a single maintenance commit after ~2 years does not establish cadence, and it is scoped to Symfony 6.1, not Symfony 7. Since Laravel 11/12 pin Symfony 7 components, the core compatibility question this assessment raised is unchanged and arguably reinforced: the release confirms the author is tracking Symfony 6.x-era deprecations, not that the dependency chain has been modernized. 609 stars and zero dependents in this dataset remains a thin adoption signal, and the bus factor is still effectively one. ReactPHP's blocking event loop still sits badly beside Octane/Swoole/RoadRunner — two concurrency models in one deploy target, with singleton and DB-connection leakage as a live class of bug. The Autobahn.JS client still does not interoperate with Laravel Echo.

Key questions before any commitment:

  • Are we actually a Laravel shop, or is there a Symfony 6.1 service in the estate this would live in? (This release is aimed squarely at the latter.)
  • Is WAMP (pub/sub plus RPC over one connection) a real requirement, or is plain channel pub/sub sufficient? If the latter, this package is strictly dominated by Reverb/Soketi.
  • What are the concurrency targets — peak concurrent connections, messages/sec, fan-out breadth?
  • Does socket auth need to be tied to Laravel's guard/session, and how are tokens refreshed on a long-lived connection?
  • Do we need presence, private channels, delivery guarantees, or replay? The bundle gives you topics, not an outbox.
  • Does the maintainer intend to follow Symfony 7, and on what timeline? v3.15.0 does not answer this, and an affirmative answer would still not make it Laravel-viable.
  • Is anyone willing to own a fork, and for how many years?

Integration Approach

Stack fit — poor as a direct dependency, workable as a boundary. The clean architectural line is: Laravel owns domain state and authorization; the socket tier is a dumb, horizontally-scaled relay that only knows channel names and signed tokens. Anything that requires the WebSocket process to read Laravel's Eloquent models or session store is a design smell that will fight both frameworks.

Migration path. If the team is currently on Symfony with this bundle, use a strangler: put every outbound push behind a Broadcaster contract in application code, keep WAMP topic handlers as the first adapter, then add a Pusher-protocol adapter (Reverb) and dual-publish during cutover. Clients migrate per-feature behind a flag; the WAMP tier stays up until connection counts on the new path reach parity for two consecutive weeks. If the team is greenfield on Laravel, skip the strangler entirely — there is nothing to strangle.

Compatibility work to do up front:

  • Resolve Composer constraints against the target Laravel version and PHP 8.2/8.3; expect a fork or a replace block. v3.15.0 does not move the Symfony version ceiling — re-run composer why-not against Symfony 7 before anything else.
  • Confirm the Ratchet/ReactPHP version is compatible with the chosen PHP runtime, and decide explicitly whether the socket process runs in the same container as Octane (it should not).
  • TLS termination and proxy configuration: sticky sessions at the load balancer are mandatory unless a shared pub/sub adapter is in place.
  • Front-end: either keep Autobahn.JS as-is (and accept two client paradigms) or write a thin WAMP-over-native-WebSocket client to retire it.

Sequencing (4–6 weeks for a spike-to-prod path):

  1. Day 1–2 spike: prove a Laravel event reaches a browser through the sidecar. If this takes more than two days, that is itself the answer — stop.
  2. Auth handshake: Laravel issues a short-lived signed token; the socket process validates it statelessly. No shared session store.
  3. Channel authorization: policy checks at subscribe time, re-validated on token refresh.
  4. Scale-out: Redis pub/sub fan-out across socket nodes; load-balancer stickiness verified.
  5. Observability: connection gauge, message rate, handler error rate, reconnect rate — all of these are absent by default.
  6. Load test at 2× projected peak before any production traffic.

Operational Impact

Maintenance. Effectively low-cadence rather than formally abandoned — a distinction v3.15.0 earns, and the only one it earns. A single Symfony 6.1 deprecation fix after ~2 years should be read as "the lights are on," not as a sustainable release rhythm; do not plan capacity against it. Adopting this still means budgeting roughly 10–20% of one backend engineer indefinitely for dependency bumps, security patching of the Ratchet/ReactPHP chain, and Symfony-version drift — and that estimate now carries an added hedge, because you cannot assume upstream will absorb the Symfony 7 migration for you. That cost lands whether or not the feature changes. Compare against Reverb, where the same cost is amortized across the Laravel community and covered by a first-party release cadence.

Support. Community forums only, and the community is Symfony-focused — the questions you will actually have ("how do I bridge this to Laravel's guard?") have no canonical answers. Onboarding is slow because the knowledge lives in the bundle's internals rather than in public documentation, and the v3.15.0 changelog (a single line plus an auto-generated compare link) reinforces that release notes will not be a reliable source of upgrade guidance. Expect 1–2 weeks for a Laravel developer to become productive with WAMP/Ratchet, 3–4 weeks if they are also owning the fork; the front-end team's Autobahn knowledge does not transfer to Echo, so it is a separate learning curve.

Scaling. Ratchet is single-process and single-threaded on one event loop. Vertical scaling is trivial, horizontal scaling requires a shared pub/sub backplane plus session affinity, and the bundle's topic registry holds in-memory state that must be consistent across nodes. Long-lived PHP processes accumulate memory — plan for scheduled rolling restarts and treat "restart" as a customer-visible event unless you build graceful drain.

Failure modes to design against:

  • Silent process death → synchronized reconnect storm; needs jittered backoff and a supervisor that pages.
  • Deploy restarts drop every connection simultaneously; without drain-and-notify, users see reconnect flicker on every release.
  • A fatal in one topic handler kills the loop for all connections — no per-connection isolation, unlike Swoole worker pools. One bad payload can take down the whole realtime surface.
  • No outbox. If you broadcast from inside an Eloquent transaction that later rolls back, clients receive phantom events. Dual-write with a transactional outbox is the mitigation, and it is application work, not package work.
  • Token expiry mid-connection and backpressure with no queueing (events silently dropped under load) are both easy to miss until production.
  • Drift between the socket tier and the app tier whenever the second framework's config or model assumptions change — and a sporadic upstream release cadence makes that drift harder to schedule against.

Ramp-up and verdict. The score of 21.5 remains accurate for this context, and v3.15.0 does not move it: a competent, once-popular Symfony bundle being evaluated for a Laravel-adjacent role it was never designed for, now with one additional maintenance commit rather than a revival. I would not adopt it. The recommended path is unchanged — an out-of-process relay only if WAMP RPC is a genuine requirement; otherwise standardize on Laravel Reverb or Soketi, keep the socket tier stateless and behind a Broadcaster interface. The one trigger worth monitoring is a follow-up release that lands Symfony 7 support, which would matter if the team ever consolidates on Symfony; it still would not make this a Laravel solution.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle