Yêu cầu thg 7 20, 2020 3:16 CH 1908 1 4
  • 1908 1 4
+2

Xử lý đa luồng trong laravel

Chia sẻ
  • 1908 1 4

Em có kết nối realtime lên Firebase. khi em thực thi 1 function thì em có update dữ liệu lên Firebase và chờ dữ liệu update thành công mới trả về message => Rất lâu khoảng 3-5s. Em muốn trả về message trước và update firebase đó sẽ chạy ngầm thì có cách nào không ạ ?.

4 CÂU TRẢ LỜI


Đã trả lời thg 7 21, 2020 1:44 SA
+6

Có nhé em, hầu hết các hệ thống web đều có hệ thống queue-job. Và rất may Laravel cũng đã support các chức năng giúp xử lý queue-job giúp mình rồi nha. Khái niệm Queue - tạm hiểu là một hàng đợi, chạy ngầm trên server và độc lập so với main process của web-app. Hệ thống Queue sẽ lấy các job trong cái hàng đợi ra và thực hiện nó.

Các job tốn nhiều thời gian như gửi Mail, Push notification... thì chúng ta sẽ đẩy job đấy vào trong Queue rồi return HTTP Response lại cho người dùng luôn, còn job đấy trong queue sẽ được chạy ngầm trên server.

Em có thể đọc thêm về queue của Laravel ở tài liệu gốc nhé: https://laravel.com/docs/7.x/queues

Chia sẻ
Avatar Ti Em @thanhminh1998
thg 7 23, 2020 2:13 SA

Cảm ơn ạ. A nghĩ sữ dụng php Mutithreading có được không ạ

thg 7 24, 2020 4:41 SA

@thanhminh1998 Push cái job đó vào queue sẽ dễ dàng scale hơn em ạ. Với cả việc thao tác với queue thì được Laravel support rồi, việc sử dụng sẽ đơn giản hơn nhiều.

Đã trả lời thg 7 21, 2020 2:27 SA
+2

Đa luồng là multi thread, cái bạn muốn là process chạy ngầm, có thể gọi là worker.

Chia sẻ
Avatar Ti Em @thanhminh1998
thg 7 23, 2020 2:19 SA

Dạ Anh. dạng như thế đó ạ

Đã trả lời thg 7 21, 2020 2:55 SA
+1
  • Khi update dữ liệu lâu thì bạn thủ xem phần code update có đang bị N + 1 query không hay có phần nào đang xử lý cồng kềnh thì nên refactor lại còn nếu mọi thứ ổn rồi mà thời gian vẫn cao thì bạn có thể tham khảo việc cho vào Queue của laravel nhé https://laravel.com/docs/7.x/queues
  • nhưng minh thấy việc trả message trước mà update sau thì không ổn cho lắm vì mình chưa thể nào xác định được là đã update thành công hay không thành công mà đã bắn message ra thì thấy không ổn
Chia sẻ
Avatar Ti Em @thanhminh1998
thg 7 23, 2020 2:20 SA

Về phần việc update Firebase nên nó chạy chậm. Em đã thử bỏ ra FB thì nó chạy rất nhanh. Cảm ơn Anh

Đã trả lời thg 7 21, 2020 3:01 SA
0

Theo mình thì sử dụng queue job, cho action vào queue chờ đợi chạy https://laravel.com/docs/7.x/queues

Chia sẻ
Avatar Ti Em @thanhminh1998
thg 7 23, 2020 4:49 SA

Bạn ơi. Có cách nào con queue job nó chạy luôn khi mình thực thi không. Chứ k cần đợi rồi mới chạy không ạ.

Avatar Tun Tun @TuanLinhChi
thg 7 26, 2020 2:01 CH

@thanhminh1998 về cơ bản nó sẽ chạy ngay khi tài nguyên cho phép. chỉ cần trên server chạy php artisan queue:work bạn ạ

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí