Laravel WebSockets is a powerful package that enables real-time communication in Laravel applications using WebSockets. This package allows developers to easily implement real-time features, such as chat applications, notifications, live updates, and more, without relying on third-party services. It provides a simple API for managing WebSocket connections and broadcasting events in real time.
Key Features of Laravel WebSockets:
- Real-Time Communication: Enables two-way communication between clients and servers in real time.
- Broadcasting: Built-in support for broadcasting events using Laravel’s event broadcasting system.
- Pusher-Compatible: Works with the Pusher API, making it easy to switch between Pusher and Laravel WebSockets.
- Dashboard: Provides a dashboard to monitor WebSocket connections, channels, and statistics.
- Scalability: Can be scaled horizontally to handle large numbers of concurrent connections.
Installation
To get started with Laravel WebSockets, follow these steps:
- Require the Package: Install the package via Composer:
1composer require beyondcode/laravel-websockets - Publish the Configuration: Publish the configuration file using Artisan:
1php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" - Configure Broadcasting: Update your
config/broadcasting.php
configuration to include thepusher
driver with Laravel WebSockets:
123456789101112'connections' => ['pusher' => ['driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'app_id' => env('PUSHER_APP_ID'),'options' => ['cluster' => env('PUSHER_APP_CLUSTER'),'useTLS' => true,],],], - Set Up Environment Variables: Update your
.env
file with the following WebSocket settings:
1234PUSHER_APP_ID=your_app_idPUSHER_APP_KEY=your_app_keyPUSHER_APP_SECRET=your_app_secretPUSHER_APP_CLUSTER=your_app_cluster - Run the WebSocket Server: Start the WebSocket server using the Artisan command:
1php artisan websockets:serve
Broadcasting Events
To broadcast events in real time, you need to create an event class.
Creating an Event Class
You can create an event class using the Artisan command:
1 |
php artisan make:event MessageSent |
In the generated event class, implement the ShouldBroadcast
interface:
Example Event Class (app/Events/MessageSent.php
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class MessageSent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message; public function __construct($message) { $this->message = $message; } public function broadcastOn() { return new Channel('chat'); } } |
Broadcasting the Event
You can broadcast the event in your controller or any other part of your application:
1 2 3 4 5 6 7 8 9 10 |
use App\Events\MessageSent; public function sendMessage(Request $request) { $message = $request->input('message'); broadcast(new MessageSent($message)); return response()->json(['status' => 'Message sent!']); } |
Listening for Events
On the client side, you can listen for events using Laravel Echo, which simplifies the process of subscribing to channels and listening for events.
Example Client-Side Code (JavaScript)
Make sure to include Laravel Echo and Pusher in your JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; const echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, encrypted: true, }); echo.channel('chat') .listen('MessageSent', (e) => { console.log('Message: ', e.message); }); |
Dashboard
Laravel WebSockets includes a built-in dashboard to monitor WebSocket connections, channels, and statistics. You can access it by navigating to /laravel-websockets
in your browser.
Conclusion
Laravel WebSockets is an excellent solution for implementing real-time communication in Laravel applications. It provides a simple and efficient way to handle WebSocket connections and broadcasting events, enabling developers to create interactive and responsive applications.
Additional Considerations
- Production Deployment: When deploying to production, ensure you have a proper server setup for handling WebSocket connections.
- Scaling: You may need to use a load balancer and multiple WebSocket servers to handle large amounts of traffic.
- Documentation: Refer to the official Laravel WebSockets documentation for more advanced features and configuration options.
- Laravel Breeze – Simple authentication starter kit
- Laravel Jetstream – Scaffolding for Laravel apps
- Laravel Passport – API authentication via OAuth2
- Laravel Sanctum – Simple API authentication
- Spatie Laravel Permission – Role and permission management
- Laravel Cashier – Subscription billing with Stripe
- Laravel Scout – Full-text search using Algolia
- Laravel Socialite – OAuth authentication (Google, Facebook, etc.)
- Laravel Excel – Excel import and export for Laravel
- Laravel Horizon – Redis queues monitoring
- Laravel Nova – Admin panel for Laravel
- Laravel Fortify – Backend authentication for Laravel
- Laravel Vapor – Serverless deployment on AWS
- Laravel Telescope – Debugging assistant for Laravel
- Laravel Dusk – Browser testing
- Laravel Mix – API for compiling assets
- Spatie Laravel Backup – Backup management
- Laravel Livewire – Building dynamic UIs
- Spatie Laravel Media Library – Manage media uploads
- Laravel Excel – Excel spreadsheet handling
- Laravel Debugbar – Debug tool for Laravel
- Laravel WebSockets – Real-time communication
- Spatie Laravel Sitemap – Generate sitemaps
- Laravel Spark – SaaS scaffolding
- Laravel Envoy – Task runner for deployment
- Spatie Laravel Translatable – Multilingual model support
- Laravel Backpack – Admin panel
- Laravel AdminLTE – Admin interface template
- Laravel Collective Forms & HTML – Simplified form and HTML generation
- Spatie Laravel Analytics – Google Analytics integration
- Laravel Eloquent Sluggable – Automatically create slugs
- Laravel Charts – Chart integration
- Laravel Auditing – Track changes in models
- Laravel JWT Auth – JSON Web Token authentication
- Laravel Queue Monitor – Monitor job queues
- Spatie Laravel Query Builder – Filter, sort, and include relationships in Eloquent queries
- Laravel Datatables – jQuery Datatables API
- Laravel Localization – Multilingual support for views and routes
- Laravel Acl Manager – Access control list manager
- Laravel Activity Log – Record activity in your app
- Laravel Roles – Role-based access control
- Spatie Laravel Tags – Tagging models
- Laravel Installer – CLI installer for Laravel
- Laravel Breadcrumbs – Generate breadcrumbs in Laravel
- Laravel Mailgun – Mailgun integration for Laravel
- Laravel Trustup Model History – Store model change history
- Laravel Deployer – Deployment automation tool
- Laravel Auth – Custom authentication guards
- Laravel CORS – Cross-Origin Resource Sharing (CORS) support
- Laravel Notifications – Send notifications through multiple channels
- Spatie Laravel Http Logger – Log HTTP requests
- Laravel Permission Manager – Manage permissions easily
- Laravel Stubs – Customize default stubs in Laravel
- Laravel Fast Excel – Speed up Excel exports
- Laravel Image – Image processing
- Spatie Laravel Backup Server – Centralize backups for Laravel apps
- Laravel Forge API – Manage servers through the Forge API
- Laravel Blade SVG – Use SVGs in Blade templates
- Laravel Ban – Ban/unban users from your application
- Laravel API Response – Standardize API responses
- Laravel SEO – Manage SEO meta tags
- Laravel Settings – Store and retrieve settings
- Laravel DOMPDF – Generate PDFs
- Laravel Turbo – Full-stack framework for building modern web apps
- Spatie Laravel Event Sourcing – Event sourcing implementation
- Laravel Jetstream Inertia – Jetstream’s Inertia.js integration
- Laravel Envoy Tasks – Task automation
- Laravel Likeable – Like/dislike functionality
- Laravel GeoIP – Determine visitor’s geographic location
- Laravel Country State City – Dropdowns for country, state, and city
- Laravel Hashids – Generate short unique hashes
- Laravel Repository – Repository pattern for Laravel
- Laravel UUID – UUID generation for models
- Spatie Laravel Medialibrary Pro – Enhanced media management
- Laravel Queue Monitor – Monitor Laravel job queues
- Laravel User Activity – Monitor user activity
- Laravel DB Snapshots – Create database snapshots
- Laravel Twilio – Twilio integration
- Laravel Roles – Role-based permission handling
- Laravel Translatable – Add translations to Eloquent models
- Laravel Teamwork – Manage teams in multi-tenant apps
- Laravel Full Text Search – Add full-text search to Laravel models
- Laravel File Manager – File and media management
- Laravel User Timezones – Automatically detect user time zones
- Laravel ChartsJS – Render charts with ChartsJS
- Laravel Stripe – Stripe API integration
- Laravel PDF Generator – PDF generation
- Laravel Elasticsearch – Elasticsearch integration
- Laravel Simple Qrcode – Generate QR codes
- Laravel Timezone – Manage timezones and conversions
- Laravel Collective API – API management for Laravel
- Laravel Rest API Boilerplate – REST API starter kit
- Laravel Multi Auth – Multi-authentication functionality
- Laravel Voyager – Admin panel for Laravel
- Laravel Voyager Database – Database manager for Voyager
- Laravel Categories – Handle categories for models
- Laravel Multitenancy – Multi-tenancy implementation
- Laravel Access Control – Advanced access control for users
- Laravel Menus – Menu management
- Laravel Translatable Routes – Multilingual route handling