Giter Club home page Giter Club logo

laravel-async's Introduction

Laravel Async

laravel-async-demo.mp4

Laravel Async is a simple package for Laravel that enables you to run your code asynchronously without using the workers and Supervisor!

Unlike the Laravel Process, Symfony Process, or other similar packages, You don't need to wait for the sub-processes in the main process to finish!

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(function () {
    sleep(10);
    
    info("Hello from Async process after 10 seconds!");
});

info("dispatched the process!");

Demo

https://youtu.be/0q8ki5JiD2o?si=Pi1X5zV5oM6Ktae3

How it works?

You can call it a hack or a trick! but Laravel Async uses the background process of the OS to run your code.

It provides a simple Laravel Console Command that unserializes your code and runs it in the background of the OS.

Supported OS

Currently, it only supports Linux and Unix-based operating systems.

Installation

You can install the package via Composer:

composer require saeedvaziry/laravel-async

Configuration

To publish the configuration file, you can run the following command:

php artisan vendor:publish --provider="SaeedVaziry\LaravelAsync\LaravelAsyncServiceProvider"

This will create a laravel-async.php file in your config directory.

php_path

The path to the PHP executable. The default value which is the path to the PHP binary should work for CLI usage. However, If you want to use it in web, You should set the path to the PHP binary because the default value will be the path to the web server's PHP binary like php-fpm.

You can also set via the .env file.

LARAVEL_ASYNC_PHP_PATH=/path/to/php

Usage

The usage is very simple and straightforward. You can provide the Closure or your Laravel Job class to the AsyncHandler facade.

Closure

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(function () {
    info("Hello from Async process!");
});

Job

You can send Jobs or any other classes that have a handle method.

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(new MyJob());

Timeouts

The default timeout is 60 seconds.

This will set a timeout of 10 seconds to the process and if it didn't finish in 10 seconds it will kill the process.

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::timeout(10)->dispatch(function () {
    info("Hello from Async process!");
});

You can also dispatch without a timeout!

!!! Be careful about this because if your code gets stuck in an infinite loop, it will drain your server resources.

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::withoutTimeout()->dispatch(function () {
    info("Hello from Async process!");
});

Testing

You can fake the AsyncHandler's facade in your tests and check if the code is dispatched or not.

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::fake();

// Your code that dispatches the AsyncHandler

AsyncHandler::assertDispatchedCounts(1);

You can test to see how many times you dispatched an async process.

Contributing

Please feel free to submit an issue or open a PR.

License

The MIT License (MIT). Please see License File for more information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.