Laravel Async là gói cung cấp một cách đơn giản để chạy mã không đồng bộ và song song dựa trên trình bao bọc Spatie Async cho ứng dụng Laravel
Cài đặt
Bạn có thể cài đặt gói Laravel Async bằng cách sử dụng Composer
composer require vxm/laravel-async
Gói cước sẽ tự động đăng ký
Bạn có thể xuất bản tệp cấu hình [tùy chọn] với
php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
Cách sử dụng
Chạy mã không đồng bộ
Sau khi cài đặt, bây giờ bạn có thể thử chạy mã async qua mặt tiền Async
use Async;
for [$i = 1; $i < 20; $i++] {
Async::run[function [] use [$i] {
sleep[1];
return $i;
}];
}
var_dump[implode[', ', Async::wait[]]];
// Output value may be like:
// string[65] "5, 2, 1, 14, 4, 6, 7, 8, 19, 16, 12, 18, 13, 3, 10, 9, 11, 17, 15"
Một công việc không đồng bộ có thể là một lớp có thể gọi được, hàm ẩn danh hoặc hàm gọi lại của Laravel
use Async;
// run with anonymous function:
Async::run[function[] {
// Do a thing
}];
// run with class@method
Async::run['Your\AsyncJobs\Class@handle'];
// call default `handle` method if method not set.
Async::run['Your\AsyncJobs\Class'];
Bạn có thể chạy nhiều công việc một lúc và đợi cho đến khi tất cả được thực hiện
use Async;
Async::run['Your\AsyncJobs\Class@jobA'];
Async::run['Your\AsyncJobs\Class@jobB'];
Async::run['Your\AsyncJobs\Class@jobC'];
Async::run['Your\AsyncJobs\Class@jobD'];
// Another way:
Async::batchRun[
'Your\AsyncJobs\Class@jobA',
'Your\AsyncJobs\Class@jobB',
'Your\AsyncJobs\Class@jobC',
'Your\AsyncJobs\Class@jobD'
];
$results = Async::wait[]; // result return from jobs above
Người nghe sự kiện
Khi tạo các quy trình không đồng bộ, bạn có thể thêm các móc sự kiện sau
use Async;
Async::run[function [] {
return 123;
}, [
'success' => function [$output] {
// `$output` of job in this case is `123`.
},
'timeout' => function [] {
// A job took too long to finish.
},
'error' => function [\Throwable $exception] {
// When an exception is thrown from job, it's caught and passed here.
},
]];
// Another way:
Async::run['AsyncJobClass@handleMethod', [
'success' => 'AsyncJobEventListener@handleSuccess',
'timeout' => 'AsyncJobEventListener@handleTimeout',
'error' => 'AsyncJobEventListener@handleError'
]];
Async::batchRun[
['AsyncJobClassA@handleMethod', ['success' => 'AsyncJobEventListenerA@handleSuccess']],
['AsyncJobClassB@handleMethod', ['success' => 'AsyncJobEventListenerB@handleSuccess']],
['AsyncJobClassC@handleMethod', ['success' => 'AsyncJobEventListenerC@handleSuccess']]
];
Gói này có nhiều tính năng và tùy chọn tuyệt vời có sẵn với các ví dụ về mã. Nếu bạn muốn tìm hiểu thêm về gói này, bạn có thể truy cập tài liệu và mã nguồn của nó trên Github
Ghi chú kết thúc
Nếu bạn là một doanh nghiệp và muốn tận dụng Laravel cho ứng dụng web dựa trên PHP tiếp theo của mình, Phần mềm CRM, ứng dụng Thương mại điện tử, ứng dụng SAAS hoặc bất kỳ sự phát triển ứng dụng web tùy chỉnh nào cho các yêu cầu riêng của bạn, thì bạn phải tìm một nhóm hoàn hảo có kinh nghiệm trong . Vì vậy, Codebrisk sẵn sàng trợ giúp bạn với các yêu cầu phù hợp của bạn về Phát triển Laravel. Xin vui lòng gửi email cho chúng tôi tại rizwan@codebrisk. com hoặc liên hệ với chúng tôi, nhân viên kinh doanh của chúng tôi sẽ liên hệ lại với bạn
Khi tiếp cận một API, việc gửi các yêu cầu HTTP đi có thể mất thời gian. Nếu bạn đang sử dụng ứng dụng khách HTTP của Laravel, bạn có thể triển khai các yêu cầu không đồng bộ để cải thiện đáng kể hiệu suất
yêu cầu không đồng bộKhi bạn gửi một yêu cầu HTTP không đồng bộ, mã của bạn sẽ đợi phản hồi trước khi chuyển sang câu lệnh tiếp theo
Yêu cầu đồng bộ với Laravel HTTP ClientĐiều này có nghĩa là nếu yêu cầu HTTP chậm và mất 5 giây, mã của bạn sẽ không hoạt động trong 5 giây. Nó sẽ chỉ chờ đợi, mà không làm bất cứ điều gì
Nếu bạn muốn tận dụng khoảng thời gian nhàn rỗi này để thực hiện các thao tác khác thì sao?
Yêu cầu không đồng bộ là yêu cầu được thực thi ở chế độ nền, vì vậy bạn không phải đợi phản hồi để tiếp tục mã của mình. Laravel HTTP Client có phương thức async[]
cho điều đó
Hãy nhìn vào đầu ra
The request has been sent, but we didn't wait for the response.Response received!{"I am the request response"}
Chúng tôi đã gửi một yêu cầu HTTP trong nền mà không chặn mã của chúng tôi. Yêu cầu HTTP được gói gọn trong một lời hứa, thông báo cho chúng tôi về trạng thái của yêu cầu và sẽ chứa phản hồi sau khi nhận được
Bạn có thể sử dụng $promise->getState[]
để biết trạng thái của yêu cầu không đồng bộ đang được thực thi trong nền. Nó sẽ trả về
php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
0, php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
1 hoặc php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
2hãy nhận biết. Nếu mã của bạn kết thúc trước khi yêu cầu không đồng bộ kết thúc, nó sẽ bị gián đoạn. Đây là lý do tại sao ở cuối mã của bạn, bạn có thể sử dụng
php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
3 để chờ nhận phản hồi⚡️ Bây giờ bạn đã biết cách thực hiện các tác vụ khác trong khi yêu cầu đang được gửi đi thay vì chờ phản hồi mà không làm gì cả
yêu cầu đồng thờiViệc sử dụng cụ thể các yêu cầu không đồng bộ là gửi một số yêu cầu cùng một lúc thay vì lần lượt từng yêu cầu. Chúng tôi gọi chúng là các yêu cầu đồng thời
Hãy tưởng tượng rằng bạn cần truy xuất danh sách người dùng thông qua API, nhưng kết quả được phân trang. Sẽ mất rất nhiều thời gian để truy cập từng trang của người dùng nếu bạn gửi các yêu cầu HTTP tuần tự như thế này
Yêu cầu HTTP đồng bộ và tuần tựThay vì gửi yêu cầu liên tục, chúng tôi có thể gửi 30 yêu cầu cùng một lúc. Điều này sẽ cải thiện đáng kể hiệu suất, đặc biệt nếu API chậm
Từ những điều vừa học, chúng ta có thể làm
Nó hoạt động tốt và đây là một giải pháp tốt. Nhưng Laravel HTTP Client đi kèm với một phương thức tiện dụng gọi là
php artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
4 để làm cho nó dễ dàng hơn. Kiểm tra cái nàyMáy khách HTTP của Laravel. Hồ bơiphp artisan vendor:publish --provider="VXM\Async\AsyncServiceProvider" --tag="config"
5 là một mảng và mỗi phiên bản phản hồi có thể được truy cập dựa trên thứ tự nó được thêm vào nhómVì vậy, mã của chúng tôi trở thành
Đó là nó
Tôi hy vọng bạn thích bài viết này. Vui lòng vỗ tay vào bài viết này [👏] và đăng ký nhận bản tin trên Phương tiện của tôi để biết thêm
👀 Bạn có thể xem qua Laradoc, một công cụ Laravel mà tôi đang xây dựng để giúp tài liệu API của bạn luôn cập nhật bằng cách tự động tạo tài liệu đó [không cần khối dock. ]