Laravel Reverb gives Laravel applications a first-party WebSocket server that works with broadcasting and Echo. It makes live updates feel familiar, but it also introduces a long-running service, queue behaviour, channel authorisation, monitoring and capacity decisions. Use it where stale information causes a real operational problem, not simply because a live badge looks clever.
01
Two reviewers picked up the same case
Imagine an operations team reviewing installer evidence. A queue shows the cases waiting for attention, who owns each one and whether more information has been requested.
Danny opens a case at 10.03. Priya opens the same queue a few seconds later, but her screen still shows the case as unassigned. Both begin checking the documents. Ten minutes of skilled work is duplicated before either person notices.
The database was correct as soon as Danny claimed the case. The problem was that Priya's browser had no reason to ask for the new state. It showed an accurate page that had quietly become stale.
This is the kind of problem real-time delivery can solve. When a claim, status change or new message is saved, the application can tell every authorised browser immediately. Nobody needs to refresh, and the interface can update the one record that changed.
Laravel Reverb provides the persistent WebSocket connection for that update. The important question is not whether the technology can do it. The question is whether immediacy changes the quality, speed or safety of the work enough to justify the extra service.
02
What Laravel Reverb actually does
Reverb is Laravel's first-party WebSocket server. A normal HTTP request opens a connection, receives a response and ends. A WebSocket keeps a connection open so the server can send a message to the browser when something changes.
Reverb fits into Laravel's existing broadcasting system rather than inventing a separate application model. A Laravel event describes what happened. The broadcasting driver sends it through Reverb. Laravel Echo listens in the browser and lets the interface respond.
It speaks the Pusher protocol, so applications built around Laravel broadcasting and Echo can use familiar concepts such as public, private and presence channels. It can be self-hosted, deployed through Laravel Forge or run as a managed service on Laravel Cloud.
That first-party integration is the main attraction. The application can use Laravel events, queues, authentication and authorisation instead of wiring together an unrelated WebSocket server and a second permission model.
03
The live update is a chain, not a magic refresh
Return to the installer queue. Claiming a case first writes the new owner to the database. The application then dispatches a broadcast event such as CaseClaimed. Laravel queues that broadcast, Reverb delivers it to subscribed connections and Echo receives it in the browser.
The Vue component does not need to reload the whole page. It can update the matching case, show the new owner and disable the claim action. Other screens may use the same event to update a count or add an activity entry.
Each link matters. A slow or stopped queue worker delays the broadcast even when Reverb is healthy. A connection may drop. A user may open the screen after the event was sent. The browser should therefore treat the database-backed page response as its starting truth and live events as later changes, not as the only record of what happened.
The server must also enforce the business rule when the action is submitted. Hiding a button after a broadcast improves the experience, but it does not prevent two near-simultaneous requests. The database and application still need an atomic claim or another conflict control.
04
Not every fresh screen needs a WebSocket
Real-time is a product requirement, not a default architecture. The useful test is how quickly the information becomes harmful when it is stale.
A chat message, collaborative edit or case ownership change may need to appear in seconds because another person is waiting or could make a conflicting decision. A management dashboard reviewed every morning does not become more valuable because it refreshes twenty times a minute.
Polling remains a sensible option. The browser asks for changes every few seconds or minutes, which is easy to understand, operate and recover. Server-sent events can also suit one-way updates, although they do not replace WebSockets for every bidirectional or collaborative feature.
| Situation | Useful delivery method | Reason |
|---|---|---|
| Case ownership, chat or live collaboration | Laravel Reverb and WebSockets | A stale screen can cause duplicated work or conflicting action within seconds |
| Background import progress | Polling or Reverb | The right choice depends on duration, user expectations and how many progress events are useful |
| Operational dashboard checked throughout the day | Timed polling | Freshness matters, but a persistent connection may add little value |
| Daily management reporting | Page load or scheduled refresh | The decision rhythm is slower than the data can change |
| Customer needs to act while offline | Email, SMS or push notification | A WebSocket only helps while the customer is connected |
Email, SMS, push notifications and in-application notifications solve a different problem. They reach a person who may not have the relevant screen open. Reverb updates connected clients; it is not a substitute for a durable notification journey.
05
Private channels protect business data
A live event often contains information that should not be public. A customer may view their own order status. A reviewer may see cases for their team. A manager may receive figures that ordinary staff cannot access.
Laravel private channels require the application to authorise the authenticated user before Echo can subscribe. The rule belongs in the server-side channel authorisation callback. It should answer the same business question as the page and API: is this user allowed to receive events for this record or group?
Allowed origins are another control. Reverb can restrict which website origins may establish connections. That is useful, but it does not decide which customer can read which order. Origin checks and channel authorisation solve different problems and both need deliberate configuration.
Broadcast the smallest useful payload. A case list may need an identifier, owner, status and update time rather than the full case, every document and every customer field. Smaller events reduce exposure, make the client easier to reason about and avoid turning each change into a large data transfer.
06
Queues and database commits decide what users see
Laravel broadcasts events through queued jobs by default so the user's original web request is not held up while messages are delivered. That means a real-time feature also depends on a working queue connection and one or more queue workers.
Queue delay becomes visible as interface delay. If the default queue is busy generating reports or importing files, a case update that should feel instant may arrive several seconds later. Important broadcasts can use an appropriate queue, but that choice should be based on measured traffic rather than an assumption that every event is urgent.
Database transactions add another subtle failure. A queued broadcast can run before the transaction that created or updated the record has committed. The event may then carry state that other code cannot yet read, or it may refer to a record that does not appear to exist.
Laravel supports dispatching broadcast events after the transaction commits. Use that behaviour where the event depends on transactional data. The rule is simple: tell connected users about a completed business fact, not an intermediate state that may still roll back.
07
Reverb is a long-running production service
A conventional PHP web request is short-lived. Reverb stays running and holds client connections open. Deploying it therefore needs a process manager, a restart strategy and health monitoring rather than only copying new application files to the server.
In production, a reverse proxy such as Nginx will commonly handle public TLS and forward WebSocket traffic to the Reverb process. The proxy needs the correct upgrade headers and sensible timeouts. The firewall, load balancer and hosting platform must allow the connection path.
A deployment that changes event classes or application code does not automatically replace code already loaded into a long-running process. Reverb provides a graceful restart command so the process can finish existing work before a process manager starts it again. That restart belongs in the release procedure alongside queue worker reloads.
Monitor the service from the outside as well as the inside. A running process is not enough if the public WebSocket handshake fails, the queue is delayed or clients repeatedly reconnect. Laravel Pulse can record Reverb connection and message activity, while infrastructure monitoring should cover process health, resource use and the public route.
08
Connection count changes the capacity calculation
Web traffic is often discussed as requests per second. Reverb also needs capacity for connections that remain open, even while nobody is sending a message. Each connection uses memory and, on Unix-like systems, an open file descriptor.
The default stream-based event loop is suitable for a modest number of connections but commonly meets an open-file ceiling around one thousand. Laravel's documentation recommends an alternative event loop such as ext-uv when the service needs to support more than roughly one thousand concurrent connections on one server.
That figure is not a promise that every application will handle the same load. Payload size, broadcast frequency, queue throughput, Redis, network limits and application behaviour all affect capacity. Test the traffic pattern you expect, including reconnects after a deployment or short network interruption.
Reverb can scale horizontally by using Redis publish and subscribe so several Reverb servers share messages behind a load balancer. That is valuable when demand justifies it. It also adds Redis, load balancing and multi-node operations to the system, which reinforces the original decision: real-time should earn its moving parts.
09
Build one valuable live path before a live platform
A safe first use of Reverb is narrow. Pick one screen where stale state already causes a measurable problem. Define the event in business language, authorise one private channel and update the smallest part of the interface.
For the review queue, CaseClaimed is a clearer event than UpdateRow. The first name records a business fact and can support an activity log, notifications and later reporting. The second only describes what one current interface happens to do.
Test the unhappy paths. Disconnect the browser and reconnect it. Stop the queue worker. Restart Reverb during an active session. Open the same case as two users. Confirm the server still rejects the second claim even if both buttons were visible. Check that a user from another team cannot subscribe by changing an identifier in the browser.
Measure the result after release. If duplicated reviews fall, hand-offs become quicker or staff stop refreshing the page, the feature has earned its place. If the live update is merely decorative, polling may have been the better permanent design.
10
Real-time should make the operation calmer
Return to Danny and Priya. After the case is claimed, every authorised queue receives the change. Priya sees the owner immediately and moves to the next case. If her connection was interrupted, the next ordinary data refresh still returns the correct database state. The server remains the authority.
The technical design now matches the operational problem. The database prevents a conflicting claim. A committed event describes what happened. A queue delivers it. Reverb carries it to connected clients. Private-channel authorisation limits who can receive it, and monitoring shows whether the live path is healthy.
That is where Laravel Reverb is genuinely useful. It makes a valuable change visible at the moment another person needs to know. It does not remove the need for permissions, queues, conflict handling, deployment discipline or capacity planning.
I build and improve Laravel and Vue applications around real business workflows. If a team is fighting stale dashboards, duplicated actions or manual refreshing, I can help decide whether Reverb, polling or a simpler notification route is the right answer before the application inherits unnecessary infrastructure.
Useful questions
Questions to answer before adding Laravel Reverb:
- Which business decision becomes wrong when the screen is stale?
- How quickly must the update arrive to prevent delay, conflict or duplicated work?
- Would timed polling meet the same need with less operational complexity?
- Is the database still enforcing the rule when two requests arrive together?
- Which private channel should carry the event, and who is authorised to join it?
- Does the event contain only the data the interface actually needs?
- Will the broadcast wait until the relevant database transaction has committed?
- Are queue workers, Reverb, the reverse proxy and TLS included in deployment and monitoring?
- Has reconnect behaviour and graceful restart been tested?
- What concurrent connection and message volume must the infrastructure support?
- How will the team measure whether the live feature improved the operation?


