Tạo broadcast event trong Laravel dễ dàng trong 10 phút
Broadcast event là một service rất quan trọng trong Laravel, nắm được nó bạn sẽ kết hợp tốt hơn khi làm dự án. Và trong bài này mình sẽ hướng dẫn cách sử dụng chi tiết
Trong số các tính năng Laravel, broadcast event là một tính năng rất hữu ích để phát sóng các sự kiện từ máy chủ tới máy khách thông qua các kênh truyền dữ liệu như WebSocket. Broadcast event cho phép bạn tạo ra các ứng dụng web thời gian thực và độc lập với các yêu cầu HTTP truyền thống. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng và tạo broadcast event trong Laravel.
I. Broadcasting là gì trong Laravel?
Broadcasting là một cơ chế cho phép phát sóng các sự kiện từ máy chủ tới các ứng dụng khách thông qua các kênh truyền dữ liệu như WebSocket. Broadcasting giúp cho các ứng dụng web có thể làm việc theo thời gian thực và độc lập với các yêu cầu HTTP truyền thống.
Broadcasting có thể được sử dụng để phát sóng các sự kiện khi một thao tác cập nhật dữ liệu trên máy chủ được thực hiện. Các sự kiện này sẽ được phát sóng tới các ứng dụng khách của bạn, như trình duyệt web hoặc ứng dụng di động, để thông báo về sự thay đổi này. Điều này cho phép các ứng dụng khách của bạn có thể tự động cập nhật dữ liệu mà không cần phải làm mới trang.
Bài viết này được đăng tại [free tuts .net]
Laravel hỗ trợ Broadcasting thông qua nhiều nhà cung cấp như Pusher, Redis, hoặc một kết nối tùy chỉnh của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Broadcasting với nhà cung cấp Pusher.
II. Cách dùng Broadcast Event trong Laravel cơ bản
Broadcasting trong Laravel cho phép phát sóng các sự kiện trực tiếp đến khách hàng của ứng dụng thông qua WebSockets. Broadcasting có thể được sử dụng để giải quyết các vấn đề như thông báo trực tiếp, cập nhật trực tuyến và nhắn tin trong thời gian thực.
Để sử dụng Broadcasting trong Laravel, bạn cần cài đặt một số gói Composer và cấu hình ứng dụng của mình. Sau đó, bạn có thể tạo các sự kiện và phát sóng chúng đến khách hàng của mình.
Dưới đây là một ví dụ về cách sử dụng Broadcasting trong Laravel.
Cài đặt gói Broadcasting
Để sử dụng Broadcasting trong Laravel, bạn cần cài đặt gói laravel-websockets và pusher/pusher-php-server. Bạn có thể cài đặt chúng bằng cách chạy lệnh sau trên terminal:
composer require beyondcode/laravel-websockets pusher/pusher-php-server
Cấu hình Broadcasting
Sau khi cài đặt gói Broadcasting, bạn cần cấu hình ứng dụng của mình để sử dụng nó. Bạn có thể cấu hình Broadcasting bằng cách thêm các giá trị sau vào tệp .env của mình:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=your-app-cluster
Thay thế các giá trị your-app-id, your-app-key, your-app-secret và your-app-cluster bằng các thông tin tương ứng của bạn.
Tạo một Event
Sau khi đã cấu hình Broadcasting, bạn có thể tạo các sự kiện và phát sóng chúng đến khách hàng của mình. Để tạo một sự kiện, bạn có thể sử dụng lệnh Artisan sau:
php artisan make:event OrderShipped
Sau khi chạy lệnh này, một tệp app/Events/OrderShipped.php sẽ được tạo ra. Trong tệp này, bạn có thể định nghĩa sự kiện của mình và cung cấp các thông tin cần thiết cho khách hàng của mình.
namespace App\Events; use App\Models\Order; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class OrderShipped { use Dispatchable, InteractsWithSockets, SerializesModels; public $order; public function __construct(Order $order) { $this->order = $order; } public function broadcastOn() { return ['orders']; } }
Trong ví dụ này, chúng ta tạo một sự kiện OrderShipped và cung cấp cho nó thông tin về đơn hàng. Trong phương thức broadcastOn(), chúng ta định nghĩa kênh mà sự kiện này sẽ được phát sóng đến. Trong trường hợp này, sự kiện OrderShipped sẽ được phát sóng đến kênh orders.
Event Broadcast
Sau khi đã tạo một sự kiện, bạn có thể phát sóng nó đến khách hàng của mình bằng cách sử dụng hàm broadcast() trong Controller hoặc trong bất kỳ đâu trong ứng dụng của mình.
namespace App\Http\Controllers; use App\Events\OrderShipped; use App\Models\Order; use Illuminate\Http\Request; class OrderController extends Controller { public function shipOrder(Request $request, $orderId) { $order = Order::findOrFail($orderId); // Ship order... event(new OrderShipped($order)); return redirect('/orders'); } }
Trong ví dụ này, chúng ta phát sóng sự kiện OrderShipped sau khi đơn hàng được vận chuyển. Sau đó, chúng ta chuyển hướng người dùng đến trang danh sách đơn hàng.
Listen to the Event
Sau khi đã phát sóng một sự kiện, bạn cần lắng nghe nó để khách hàng của mình có thể nhận được các thông tin mới nhất. Để lắng nghe một sự kiện, bạn có thể sử dụng JavaScript của Pusher trong trang web của mình.
<!DOCTYPE html> <html> <head> <title>Laravel Broadcasting Example</title> <script src="https://js.pusher.com/7.0/pusher.min.js"></script> </head> <body> <h1>Orders</h1> <ul id="orders"></ul> <script> var pusher = new Pusher('your-app-key', { cluster: 'your-app-cluster' }); var channel = pusher.subscribe('orders'); channel.bind('App\\Events\\OrderShipped', function(data) { var order = JSON.stringify(data.order); var li = document.createElement('li'); li.appendChild(document.createTextNode(order)); document.getElementById('orders').appendChild(li); }); </script> </body> </html>
Trong ví dụ này, chúng ta sử dụng JavaScript của Pusher để lắng nghe sự kiện App\Events\OrderShipped trên kênh orders. Khi một sự kiện được phát sóng, chúng ta sẽ hiển thị đơn hàng tương ứng trong danh sách.
Đó là cách sử dụng Broadcasting trong Laravel để phát sóng các sự kiện trực tiếp đến khách hàng của mình thông qua WebSockets.
III. Các bước tạo Broadcast Event trong Laravel
Để tạo một broadcast event trong Laravel, bạn cần thực hiện các bước sau:
Bước 1: Cài đặt Pusher
Laravel sử dụng Pusher để phát sóng các sự kiện qua WebSockets. Để sử dụng Pusher, bạn cần cài đặt gói pusher/pusher-php-server bằng Composer.
composer require pusher/pusher-php-server
Sau đó, bạn cần đăng ký tài khoản Pusher và tạo ứng dụng. Bạn sẽ nhận được một app_id, app_key, và app_secret cho ứng dụng của mình.
Bước 2: Cấu hình ứng dụng
Sau khi cài đặt Pusher, bạn cần cấu hình ứng dụng của mình để sử dụng Pusher. Trong tệp .env, bạn cần đặt các giá trị sau:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=your-app-cluster
Bước 3: Tạo một Event
Sau khi cấu hình ứng dụng, bạn có thể tạo một broadcast event. Một broadcast event là một lớp PHP đại diện cho một sự kiện mà bạn muốn phát sóng đến khách hàng của mình. Lớp này phải triển khai giao diện ShouldBroadcast.
Ví dụ, bạn có thể tạo một broadcast event OrderShipped để thông báo cho khách hàng của bạn rằng đơn hàng của họ đã được vận chuyển.
namespace App\Events; use App\Models\Order; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class OrderShipped implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $order; public function __construct(Order $order) { $this->order = $order; } public function broadcastOn() { return ['orders']; } public function broadcastAs() { return 'order.shipped'; } }
Trong ví dụ này, chúng ta tạo một broadcast event OrderShipped để thông báo cho khách hàng của chúng ta rằng đơn hàng đã được vận chuyển. Trong phương thức __construct(), chúng ta truyền đối tượng Order vào sự kiện để cung cấp thông tin về đơn hàng cho khách hàng. Sử dụng trait SerializesModels, đối tượng Order sẽ được tự động chuyển đổi thành một mảng dữ liệu có thể được gửi đến khách hàng.
Chúng ta cũng định nghĩa phương thức broadcastOn() để xác
định kênh mà sự kiện sẽ được phát sóng đến. Trong ví dụ này, chúng ta phát sóng sự kiện đến kênh orders.
Cuối cùng, chúng ta định nghĩa phương thức broadcastAs() để xác định tên của sự kiện được phát sóng. Trong ví dụ này, tên của sự kiện được đặt là order.shipped.
Bước 4: Event Broadcast
Sau khi tạo một broadcast event, bạn có thể phát sóng sự kiện bằng cách sử dụng phương thức broadcast().
Ví dụ, để phát sóng sự kiện OrderShipped, bạn có thể sử dụng mã sau:
event(new OrderShipped($order));
Trong đó, $order là một đối tượng đại diện cho đơn hàng đã được vận chuyển.
Khi một sự kiện được phát sóng, Laravel sẽ gửi một yêu cầu HTTP đến máy chủ Pusher để phát sóng sự kiện đến khách hàng của bạn. Khách hàng sẽ nhận được sự kiện thông qua WebSocket và có thể xử lý sự kiện theo cách tùy ý.
Bước 5: Xử lý Event trên máy khách
Để xử lý sự kiện trên máy khách, bạn cần đăng ký một người nghe (listener) cho sự kiện trong JavaScript.
Ví dụ, để xử lý sự kiện order.shipped được phát sóng từ kênh orders, bạn có thể sử dụng mã sau:
Echo.channel('orders') .listen('.order.shipped', (data) => { console.log('Order shipped:', data); });
Trong đó, Echo là một đối tượng JavaScript được cung cấp bởi thư viện Pusher, cho phép bạn kết nối đến máy chủ Pusher và lắng nghe các sự kiện. channel('orders') sẽ đăng ký người nghe cho kênh orders, trong khi .listen('.order.shipped', (data) => { ... }) sẽ xử lý sự kiện order.shipped được phát sóng trên kênh orders. Dữ liệu được truyền đến từ sự kiện sẽ được chuyển đến hàm callback (data) => { ... }, nơi bạn có thể xử lý sự kiện theo cách tùy ý.
Đó là cách bạn tạo và sử dụng broadcast event trong Laravel.
Kết thúc bài viết
Trong bài viết này, chúng ta đã tìm hiểu cách sử dụng và tạo broadcast event trong Laravel. Broadcasting là một tính năng mạnh mẽ của Laravel cho phép phát sóng các sự kiện từ máy chủ tới các ứng dụng khách thông qua các kênh truyền dữ liệu như WebSocket. Broadcasting giúp cho các ứng dụng web có thể làm việc theo thời gian thực và độc lập với các yêu cầu HTTP truyền thống.
Để sử dụng Broadcasting trong Laravel, bạn cần phải cấu hình Broadcasting và tạo một broadcast event để phát sóng các sự kiện từ máy chủ. Sau đó, bạn có thể phát sóng các sự kiện từ máy chủ và xử lý các sự kiện trên máy khách.
Trong bài viết này, chúng ta đã tìm hiểu cách sử dụng Broadcasting với nhà cung cấp Pusher. Tuy nhiên, Laravel cũng hỗ trợ Broadcasting với các nhà cung cấp khác như Redis hoặc một kết nối tùy chỉnh của bạn.
Tổng kết lại, Broadcasting là một tính năng rất hữu ích của Laravel để phát sóng các sự kiện trong ứng dụng web. Nó giúp cho ứng dụng web của bạn có thể làm việc theo thời gian thực và độc lập với các yêu cầu HTTP truyền thống, cung cấp cho người dùng trải nghiệm tốt hơn.
# Top 2 bài tutorials cách sử dụng và tạo Broadcast Event trong Laravel.
1. Để hiểu hơn về cách sử dụng của Broadcasting trong Laravel giúp xây dựng chat box thì bạn nên xem thử
Link bài viết :https://hoclaravel.net/tong-quan/su-dung-broadcast-trong-larvel-xay-dung-u/
2. Để biết được Broadcasting hoạt động ra sao thì bạn nên xem hướng dẫn ở bài biết dưới đây
Link bài viết : https://code.tutsplus.com/vi/tutorials/how-laravel-broadcasting-works--cms-30500
Một số câu hỏi thường gặp về Broadcasting trong Laravel
Câu 1: Laravel sử dụng giao thức nào để Broadcasting?
Laravel sử dụng giao thức WebSocket để Broadcasting. WebSocket là một giao thức truyền tải dữ liệu hai chiều giữa client và server, cho phép truyền tải dữ liệu thời gian thực giữa các bên mà không cần phải tải lại trang. WebSocket cho phép kết nối hai chiều giữa client và server, cho phép server gửi thông tin đến client mà không cần client yêu cầu, và ngược lại. WebSocket cung cấp một phương thức kết nối duy trì trên cùng một kết nối mạng, cho phép server gửi dữ liệu đến client mà không cần client gửi yêu cầu. Laravel sử dụng giao thức WebSocket để truyền tải dữ liệu thời gian thực giữa các client và server, cho phép các ứng dụng web cập nhật nội dung mà không cần phải tải lại trang.
Câu 2: Tôi có thể sử dụng Broadcasting với các ứng dụng mobile?
Có thể. Broadcasting có thể được sử dụng với các ứng dụng mobile bằng cách sử dụng một giao thức khác gọi là Pusher. Pusher là một dịch vụ trực tuyến cho phép truyền tải dữ liệu thời gian thực giữa các client và server. Laravel cung cấp tích hợp với Pusher để sử dụng Broadcasting trong các ứng dụng mobile. Bạn có thể sử dụng Laravel Echo để kết nối ứng dụng mobile với Pusher. Bằng cách này, bạn có thể truyền tải dữ liệu thời gian thực giữa các client và server của ứng dụng mobile.
Câu 3 : Có cần cài đặt thêm gì để sử dụng Broadcasting trong Laravel không?
Có, để sử dụng Broadcasting trong Laravel, bạn cần cài đặt và cấu hình một số thứ như sau:
-
Cài đặt Laravel Echo: Laravel Echo là một package được cung cấp bởi Laravel, giúp kết nối ứng dụng của bạn với server để truyền tải dữ liệu thời gian thực.
-
Cài đặt và cấu hình Pusher: Pusher là một dịch vụ trực tuyến cho phép truyền tải dữ liệu thời gian thực giữa các client và server. Bạn cần đăng ký tài khoản Pusher và cấu hình ứng dụng của bạn để sử dụng Pusher.
-
Cấu hình Broadcasting trong Laravel: Bạn cần cấu hình Laravel để sử dụng Broadcasting thông qua các file cấu hình như broadcasting.php và app.php.
-
Tạo các kênh (channels): Các kênh là nơi truyền tải dữ liệu thời gian thực giữa client và server. Bạn cần tạo các kênh cho các loại dữ liệu khác nhau để truyền tải giữa các client và server.
Sau khi cài đặt và cấu hình các thành phần trên, bạn có thể sử dụng Broadcasting trong Laravel để truyền tải dữ liệu thời gian thực giữa các client và server.