Công việc của Laravel có không đồng bộ không?

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 đó

Yêu cầu không đồng bộ với Laravel HTTP Client

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"
2

Trạng thái hứa hẹn

hã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ời

Việ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

yêu cầu đồng thời

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ày

Máy khách HTTP của Laravel. Hồ bơi

php 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óm

Vì 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. ]

Laravel không đồng bộ hay đồng bộ?

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. Ứng dụng HTTP của Laravel có phương thức async[] cho điều đó.

Laravel có đồng bộ không?

Theo mặc định, Laravel đặt giá trị của biến này thành sync , nghĩa là framework sẽ xử lý tất cả các công việc một cách đồng bộ.

Làm cách nào để gọi hàm không đồng bộ trong Laravel?

Chạy mã không đồng bộ . Không đồng bộ. run[function[] { // Làm một việc }]; // chạy với class@method Không đồng bộ. run['Your\AsyncJobs\Class@handle']; . Không đồng bộ. run['Your\AsyncJobs\Class']; .

Laravel queue hoạt động như thế nào?

Hàng đợi Laravel cung cấp một API thống nhất trên nhiều phụ trợ hàng đợi khác nhau, chẳng hạn như Beanstalk, Amazon SQS, Redis hoặc thậm chí là cơ sở dữ liệu quan hệ. Hàng đợi cho phép bạn trì hoãn việc xử lý một tác vụ tốn thời gian, chẳng hạn như gửi email, cho đến một thời điểm sau đó .

Chủ Đề