Tôi đang xây dựng một trang web trong CakePHP xử lý các tệp được tải lên mặc dù API XML-RPC và mặc dù một lối vào web. Các tệp cần được quét bởi ClamAV, hình thu nhỏ cần được tạo, v.v. Tất cả công việc chuyên sâu về tài nguyên cần một thời gian mà người dùng không phải đợi. Vì vậy, tôi đang xem xét xử lý không đồng bộ với PHP nói chung và CakePHP nói riêng.Xử lý không đồng bộ hoặc hàng đợi thư trong PHP (CakePHP)
Tôi đã xem qua số MultiTask plugin cho CakePHP có vẻ đầy hứa hẹn. Tôi cũng đã xem các triển khai hàng đợi thông báo khác nhau như dropr và beanstalkd. Tất nhiên, tôi cũng sẽ cần một số loại quá trình nền, có thể được thực hiện bằng cách sử dụng một Cake Shell của một số loại. Tôi đã thấy MultiTask sử dụng PHP_Fork để triển khai một trình tiện ích PHP đa luồng.
Tôi cần một số lời khuyên về cách kết hợp tất cả các phần này lại với nhau theo cách tốt nhất.
- Có một ý tưởng hay để có một daemon chạy dài được viết bằng PHP? Tôi nên theo dõi điều gì?
- Lợi thế của việc triển khai hàng đợi thư bên ngoài là gì? Plugin MultiTask không sử dụng hàng đợi tin nhắn bên ngoài. Nó cuộn nó bằng cách sử dụng một bảng MySQL để lưu trữ các nhiệm vụ.
- Tôi nên sử dụng hàng đợi thông báo nào? dropr? beanstalkd? Thứ gì khác?
- Tôi nên triển khai bộ xử lý phụ trợ như thế nào? Là một daemon PHP forking một ý tưởng tốt hay chỉ yêu cầu cho sự cố?
Gói hiện tại của tôi là sử dụng plugin MultiTask hoặc chỉnh sửa để sử dụng beanstald thay vì triển khai bảng MySQL của chính nó. Công việc trong hàng đợi có thể chỉ đơn giản bao gồm một tên tác vụ và một mảng các tham số. Các daemon PHP sẽ xem cho các công việc đến và chuyển chúng ra cho một trong những chủ đề con của nó. Lệnh này sẽ chỉ thực hiện nhiệm vụ CakePHP với các tham số đã cho.
Bất kỳ ý kiến, lời khuyên, nhận xét, gotchas hoặc ngọn lửa về điều này?
Ngoài ra còn có một số thông tin về Asynch. chế biến @ [xếp hàng-trì hoãn-thi hành-in-cakephp /] (http://www.dereuromark.de/2013/12/22/queue-deferred-execution-in-cakephp/). – mark