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-server; laravel-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);
});

