Tôi muốn dữ liệu được khách hàng gửi (qua bài đăng) được đặt trong hàng đợi và tập lệnh php trên máy chủ của tôi trước tiên sẽ kiểm tra nếu hàng đợi trống. Nếu hàng đợi không trống, thì tập lệnh sẽ xử lý tất cả dữ liệu trong hàng đợi một. Làm cách nào để làm điều này?PHP Làm cách nào để thực hiện xử lý hàng đợi trong php
Trả lời
Hãy xem this.
Nó sử dụng memcached để kiên trì.
Bạn có thể sử dụng giống như Zero MQ
Xem Example by Rasmus Lerdorf.
Bạn cũng có thể xem xét sử dụng Gearman để phân phối tải.
Dưới đây là một hướng dẫn tuyệt vời cho việc này:
Các giải pháp khác là sử dụng gearman mà họ dường như đã đưa vào PHP (nó không phải là lần cuối cùng tôi chơi với nó): http://php.net/manual/en/book.gearman.php
Vấn đề với cách tiếp cận cronjob là cronjob có thể ở mức tối đa là 1 phút, vì vậy có thể trì hoãn 1 phút trong quá trình thực hiện công việc, nếu được chấp nhận thì tốt hơn là sử dụng hàng đợi với tập lệnh bỏ phiếu.
Kể từ khi DB quan hệ (Ví dụ: MySQL) rất linh hoạt và được các nhà phát triển web hiểu rõ, chúng được sử dụng cho nhiều loại hàng đợi công việc. Nhiều ứng dụng PHP sử dụng giải pháp này làm dự phòng khi bộ nhớ đệm đối tượng không được định cấu hình. Đó là phương pháp cuối cùng bởi vì đó là một cách rất tốn kém để thực hiện một hàng đợi.
Nếu bạn phải sử dụng MySQL làm hàng đợi, một trong những kỹ sư của Percona đã viết điều này blog entry về việc quản lý các điểm đau tiềm ẩn.
Nếu bạn muốn triển khai khả năng mở rộng nhất, tôi rất muốn giới thiệu ZeroMQ. Tuy nhiên nó không phải là một phần mở rộng PHP mặc định hoặc đặc biệt phổ biến. Vì vậy, đối với một dự án mà bạn sẽ không được kiểm soát ngăn xếp máy chủ web: Sử dụng đối tượng APC, Memcache hoặc Memcached, và sau đó dự phòng vào một bảng bộ nhớ cache MySQL.
Đây là điều bạn có thể dễ dàng thực hiện với thư viện enqueue. Đầu tiên, bạn có thể chọn từ nhiều loại transports, chẳng hạn như AMQP, STOMP, Redis, Amazon SQS, Hệ thống tệp và v.v.
Thứ hai, Rất dễ sử dụng. Hãy bắt đầu cài đặt:
Bạn phải cài đặt thư viện enqueue/simple-client
và one of the transports. Giả sử bạn chọn hệ thống tập tin, hãy cài đặt thư viện enqueue/fs
.Để tóm tắt:
composer require enqueue/simple-client enqueue/fs
Bây giờ chúng ta hãy xem làm thế nào bạn có thể gửi tin nhắn từ kịch bản POST của bạn:
<?php
// producer.php
use Enqueue\SimpleClient\SimpleClient;
include __DIR__.'/vendor/autoload.php';
$client = new SimpleClient('file://'); // the queue will store messages in tmp folder
$client->sendEvent('a_topic', 'aMessageData');
Kịch bản tiêu thụ:
<?php
// consumer.php
use Enqueue\SimpleClient\SimpleClient;
use Enqueue\Psr\PsrProcessor;
use Enqueue\Psr\PsrMessage;
include __DIR__.'/vendor/autoload.php';
$client = new SimpleClient('file://');
$client->bind('a_topic', 'a_processor_name', function(PsrMessage $psrMessage) {
// processing logic here
return PsrProcessor::ACK;
});
// this call is optional but it worth to mention it.
// it configures a broker, for example it can create queues and excanges on RabbitMQ side.
$client->setupBroker();
$client->consume();
Run as nhiều consumer.php
quá trình như bạn bằng cách sử dụng supervisord hoặc các trình quản lý quy trình khác, trên máy tính cục bộ, bạn có thể chạy nó mà không cần bất kỳ gói hoặc lib bổ sung nào.
Đó là một ví dụ cơ bản và enqueue có rất nhiều tính năng khác có thể có ích. Nếu bạn quan tâm, hãy kiểm tra số enqueue documentation.
- 1. Xử lý không đồng bộ hoặc hàng đợi thư trong PHP (CakePHP)
- 2. Xử lý hàng đợi SQS bằng boto
- 3. hàng đợi xử lý perl
- 4. Hàng đợi đa xử lý trong Python
- 5. Tạo hàng đợi email bằng PHP?
- 6. Xử lý lỗi PHP
- 7. xử lý ảnh hàng loạt cronjob trong php
- 8. Làm thế nào để xử lý một dòng mới như ngắt dòng thực trong PHP Markdown?
- 9. Thực hiện một loại hàng đợi xử lý đặc biệt trong Python
- 10. Làm thế nào để sử dụng hàng đợi đa xử lý trong Python?
- 11. Cách xóa hàng đợi đa xử lý trong python
- 12. Làm cách nào để xử lý các ngoại lệ khi sử dụng luồng và Hàng đợi?
- 13. xử lý yêu cầu json trong PHP
- 14. Làm thế nào để thực hiện mẫu flyweight trong php?
- 15. ngừng xử lý tệp php
- 16. Cách tốt nhất để xử lý XML lớn trong PHP
- 17. Implenting Xử lý thẻ tín dụng trong PHP MySql Site
- 18. Làm cách nào để xử lý dữ liệu luồng trong PHP?
- 19. Làm cách nào để phát hiện xem tập lệnh PHP đã chạy chưa?
- 20. Làm thế nào để xử lý lỗi ngoại khóa của MySQL trong Php?
- 21. Làm thế nào là steganography thực hiện trong php
- 22. Cách gửi_after trong hàng đợi hiện tại?
- 23. Làm cách nào để đơn giản hóa việc xử lý biểu mẫu bằng PHP?
- 24. Làm cách nào để xử lý bảng lớn trong MySQL?
- 25. Xử lý ngoại lệ tùy chỉnh php
- 26. Làm cách nào để xử lý xác thực bằng HttpWebRequest.AllowAutoRedirect?
- 27. Xử lý gián đoạn với Hàng đợi âm thanh
- 28. PHP mạnh mẽ bao gồm để xử lý lỗi?
- 29. "chọn" trên nhiều Hàng đợi đa xử lý Python?
- 30. Làm thế nào để bạn nhận được nhiều trình xử lý lỗi trong PHP?
Tạo bảng trong cơ sở dữ liệu để gửi dữ liệu, và sau đó chạy công việc crontab bao giờ x để chọn nó? – BugFinder
Có. Tôi thích cách tiếp cận này.Nhưng sau khi chèn nhiệm vụ trong bảng, làm thế nào để tôi lấy nhiệm vụ được thực hiện và cập nhật bảng khi nhiệm vụ được hoàn thành? – ASHUTOSH
Đó là điểm của cronjob để chạy một nhiệm vụ để xử lý, truy cập vào db và cập nhật nó – BugFinder