search
HomePHP FrameworkLaravelUsing Swoole to improve Laravel performance (Shadowfax)

The following is the tutorial column of laravel to introduce Shadowfax: Let Laravel wear the sword of Swoole, I hope it will be helpful to friends in need!

Swoole can be said to be a sharp sword for PHP. It expands the boundaries of PHP and allows many PHPers have seen the dawn of high concurrency. Using Swoole to improve the performance of Laravel is a very worthwhile investment. In this way, you can not only obtain the high performance of Swoole, but also take into account the high efficiency of Laravel, getting the best of both worlds. Shadowfax is such an expansion package. It is simple and easy to use and can help developers quickly migrate Laravel applications to run on Swoole.

First let's take a look at the performance of Laravel applications running using Shadowfax:

I use wrk as the benchmark tool this time, based on the latest version of Laravel 7, But the session-related middleware has been removed. Because Laravel enables sessions by default, and the session driver is file, if you run a test in this case, a session file will be created for each request, so the results will be meaningless. (Applications that pursue performance should not use file as the session driver)

Environment 1:

  • Hardware: 1 CPU, 4 Cores, 16GB Memory
  • MacOS 10.15.3
  • PHP 7.3.12 (opcache enabled)
  • Swoole 4.4.13
  • Shadowfax 2 (20 worker processes)

This environment is my personal Macbook Pro, which has better performance. I used wrk to start 4 threads and conducted a stress test with 200 concurrency:

wrk -t4 -c200 http://127.0.0.1:1215/

The result was 12430 rps:

Running 10s test @ http://127.0.0.1:1215/
  4 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    26.44ms   31.44ms 212.73ms   84.28%
    Req/Sec     3.13k   839.99     6.07k    65.75%
  124418 requests in 10.01s, 312.06MB read
  Socket errors: connect 0, read 54, write 0, timeout 0
Requests/sec:  12430.20
Transfer/sec:     31.18MB

Environment 2:

  • Hardware: 2 CPUs, 2 Cores, 4GB Memory
  • CentOS 7.5.1804
  • PHP 7.3.16 (opcache enabled)
  • Swoole 4.4. 17
  • Shadowfax 2 (10 worker processes)

This environment is a virtual cloud server instance of a certain cloud, with general configuration. I used wrk to start 2 threads and conducted a stress test with 100 concurrency:

wrk -c100 http://127.0.0.1:1215/

The result is 4001 rps:

Running 10s test @ http://127.0.0.1:1215/
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    25.06ms   12.11ms  85.92ms   60.94%
    Req/Sec     4.02k    41.46     4.08k    79.79%
  40321 requests in 10.08s, 101.13MB read
Requests/sec:   4001.76
Transfer/sec:     10.04MB

Is the performance pretty good? Compared with the traditional PHP-FPM, it has been greatly improved.

Installation and use

The installation of Shadowfax is very simple and only requires two steps:

The first step is to use Composer to install Shadowfax into your Laravel project Go to:

composer require huang-yi/shadowfax

The second step is to use Laravel’s Artisan command shadowfax:publish to publish the configuration file:

php artisan shadowfax:publish

After execution, in your project root directory A configuration file named shadowfax.yml will be created, which you need to adjust according to the environment. Of course, this file will be automatically added to .gitignore, just like the .env file. The configuration may be different in different environments.

Now you can start your service through the Shadowfax command:

php shadowfax start

If it is the default configuration, you can access it through http://127.0.0.1:1215 your application. Of course, this is just for simple use. More information can be found on the Shadowfax project homepage.

Why choose Shadowfax

Of course, some friends will ask, there are already similar open source projects on Github, why do we need to reinvent the wheel again. In fact, this is not the case. I started trying to integrate Swoole and Laravel as early as 2016, and have open sourced two related projects. Currently, the swooletw/laravel-swoole with the highest number of stars in this regard is the fork of huang-yi/ that I released earlier. laravel-swoole-http. But I didn’t promote my project because I knew very well that previous projects had more or less problems and could not support coroutines well, and coroutines happen to be Swoole’s strongest weapon, so All gave up.

Now, Shadowfax can support coroutines very well, you can safely enable Swoole's coroutine features. Moreover, Shadowfax also solves the problem of database connection in the coroutine environment. When you enable Swoole's one-click coroutine, Shadowfax will automatically create a connection pool for your database connection. The most important thing is that all this is insensible at the level of your application code. You can still write business code as usual without any mental burden, because Shadowfax does not require you to make any changes in the way you write code.

Finally, what I want to explain is that Shadowfax did not deliberately give Laravel the ability to use Swoole. Its main purpose is: To improve Laravel at the minimum cost without destroying the Laravel development experience. Application performance. I also don’t recommend developers to use any interface of Swoole in Laravel, because Laravel itself is a framework that runs in the traditional PHP mode and is not friendly to Swoole. If you are not an experienced Swoole developer, it is easy to use it during use. Something went wrong. If your Laravel application does not use any Swoole interface, it means that your program can also run in PHP-FPM mode. Once there is a problem with the program running on Swoole, we can immediately switch back to PHP-FPM mode. , which can ensure the availability of the program.

The above is the detailed content of Using Swoole to improve Laravel performance (Shadowfax). For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:segmentfault. If there is any infringement, please contact admin@php.cn delete
Laravel framework skills sharingLaravel framework skills sharingApr 18, 2025 pm 01:12 PM

In this era of continuous technological advancement, mastering advanced frameworks is crucial for modern programmers. This article will help you improve your development skills by sharing little-known techniques in the Laravel framework. Known for its elegant syntax and a wide range of features, this article will dig into its powerful features and provide practical tips and tricks to help you create efficient and maintainable web applications.

The difference between laravel and thinkphpThe difference between laravel and thinkphpApr 18, 2025 pm 01:09 PM

Laravel and ThinkPHP are both popular PHP frameworks and have their own advantages and disadvantages in development. This article will compare the two in depth, highlighting their architecture, features, and performance differences to help developers make informed choices based on their specific project needs.

Laravel user login function listLaravel user login function listApr 18, 2025 pm 01:06 PM

Building user login capabilities in Laravel is a crucial task and this article will provide a comprehensive overview covering every critical step from user registration to login verification. We will dive into the power of Laravel’s built-in verification capabilities and guide you through customizing and extending the login process to suit specific needs. By following these step-by-step instructions, you can create a secure and reliable login system that provides a seamless access experience for users of your Laravel application.

What versions of laravel are there? How to choose the version of laravel for beginnersWhat versions of laravel are there? How to choose the version of laravel for beginnersApr 18, 2025 pm 01:03 PM

In the Laravel framework version selection guide for beginners, this article dives into the version differences of Laravel, designed to assist beginners in making informed choices among many versions. We will focus on the key features of each release, compare their pros and cons, and provide useful advice to help beginners choose the most suitable version of Laravel based on their skill level and project requirements. For beginners, choosing a suitable version of Laravel is crucial because it can significantly impact their learning curve and overall development experience.

How to view the version number of laravel? How to view the version number of laravelHow to view the version number of laravel? How to view the version number of laravelApr 18, 2025 pm 01:00 PM

The Laravel framework has built-in methods to easily view its version number to meet the different needs of developers. This article will explore these methods, including using the Composer command line tool, accessing .env files, or obtaining version information through PHP code. These methods are essential for maintaining and managing versioning of Laravel applications.

The latest method of using php framework laravelThe latest method of using php framework laravelApr 18, 2025 pm 12:57 PM

Laravel is a popular PHP-based web application framework that is popular among developers for its elegant syntax and powerful features. Its latest version introduces many improvements and new features designed to improve the development experience and application performance. This article will dive into Laravel's latest approach, focusing on how to leverage these updates to build more powerful and efficient web applications.

Laravel framework installation methodLaravel framework installation methodApr 18, 2025 pm 12:54 PM

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

How to learn Laravel How to learn Laravel for freeHow to learn Laravel How to learn Laravel for freeApr 18, 2025 pm 12:51 PM

Want to learn the Laravel framework, but suffer from no resources or economic pressure? This article provides you with free learning of Laravel, teaching you how to use resources such as online platforms, documents and community forums to lay a solid foundation for your PHP development journey from getting started to master.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Have Crossplay?
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor