Broadcasting trong Laravel

04/01/2022   Laravel

Broadcasting trong Laravel

1. Broadcasting là gì
- Broadcasting là phát tin
- Broadcasting trong Laravel là phát tin theo các channel đến server Websocket
- Có thể Broadcasting bằng các package: predis/predis, pusher/pusher-php-server,...

2. Websocket là gì
- Là server nhận tin để báo tin cho các user subscribe
- Có thể dùng: pusher.com; laravel-echo-serverlaravel-websockets

3. Các loại channel
- Tên các kênh để user subscribe, có các loại: public, private, presence
+ public: tất cả user có thể subscribe và nhận tin >> here
+ private: tất cả user phải authorization mới được subscribe và nhận tin >> here
+ presence: là private channel có thêm thông tin user như subscribing to, and unsubscribing.. >> here
- User subscribe và nhận tin từ websocket, có thể dùng các package js: pusher-js, laravel-echo...

4. Broadcasting trong Laravel
- Tạo rules để truy cập channel routes/channels.php,khi user gửi yêu cầu subscribe channel, quy tắc xác thực user sẽ xử lý theo rules
- Server Laravel phát tin theo channel này thông qua method broadcastOn() trong Event
- Server websocket nhận tin và truyền tin cho tất cả User subscribe
- User lắng nghe tin và xử lý theo ý muốn

5. Các hàm sử dụng trong Event
- broadcastQueue(): khai báo tên queue sẽ push broadcast job vào. 
* interface ShouldBroadcastNow: sử dụng khi muốn phát tin ngay, kho push vào queue
broadcastOn(): khai báo tên channel sẽ broadcash
- broadcastAs(): khai báo tên của event broadcash (mặc đinh là null)
- broadcastWith(): khái báo dữ liệu sẽ broadcash (mặc định lấy tất cả dữ liệu truyền vào constructor)
- broadcastWhen(): điều kiện sẽ broadcash (mặc định là true)

6. Quy định các user được subscribe channel
Vd: 
Tên channel: 'user.'.$this->user->id , trong event
----------------------------------------------------------------------
public function broadcastOn(){
     return new PrivateChannel('user.'.$this->user->id);
}
----------------------------------------------------------------------
=> Đặt tên cho event broadcash
----------------------------------------------------------------------
public function broadcastAs() {
     return 'user.created';
}
----------------------------------------------------------------------
=> Quy định các User được subscribe channel trong routes/channel.php
----------------------------------------------------------------------
Broadcast::channel('user.{id}', function ($user, $id) {
     return $user->isUser() && $user->id == $id;
});
----------------------------------------------------------------------
7. Gọi sự kiện để broadcash tin cho user
- Broadcast cho tất cả người dùng: event(new UserCreated($user));
=> hoặc: broadcast(new UserCreated($user));
- Broadcast cho tất cả trừ user hiện tại (current user): broadcast(new UserCreated($user))->toOthers();

8. Lắng nghe tin ở frontend
- Lắng nghe private channel sử dụng laravel-echo
window.Echo.channel(`user.${userId}`) //name of channel
     .listen('.user.created', ({message}) => { // name of event broadcash
           handleUserCreated(message);
      });
 

Bài viết cùng chủ đề