Asked Jul 20th, 3:16 PM 215 1 4
  • 215 1 4
+2

Xử lý đa luồng trong laravel

Share
  • 215 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 ANSWERS


Answered Jul 21st, 1:44 AM
+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

Share
Ti Em @thanhminh1998
Jul 23rd, 2:13 AM

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

0
| Reply
Share
Jul 24th, 4:41 AM

@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.

-1
| Reply
Share
Answered Jul 21st, 2:27 AM
+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.

Share
Ti Em @thanhminh1998
Jul 23rd, 2:19 AM

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

0
| Reply
Share
Answered Jul 21st, 2:55 AM
+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
Share
Ti Em @thanhminh1998
Jul 23rd, 2:20 AM

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

0
| Reply
Share
Answered Jul 21st, 3:01 AM
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

Share
Ti Em @thanhminh1998
Jul 23rd, 4:49 AM

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 ạ.

-1
| Reply
Share
Nghiem Tuan @TuanLinhChi
Jul 26th, 2:01 PM

@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 ạ

0
| Reply
Share