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 in Action: Real-World Applications and ExamplesLaravel in Action: Real-World Applications and ExamplesApr 16, 2025 am 12:02 AM

Laravelcanbeeffectivelyusedinreal-worldapplicationsforbuildingscalablewebsolutions.1)ItsimplifiesCRUDoperationsinRESTfulAPIsusingEloquentORM.2)Laravel'secosystem,includingtoolslikeNova,enhancesdevelopment.3)Itaddressesperformancewithcachingsystems,en

Laravel's Primary Function: Backend DevelopmentLaravel's Primary Function: Backend DevelopmentApr 15, 2025 am 12:14 AM

Laravel's core functions in back-end development include routing system, EloquentORM, migration function, cache system and queue system. 1. The routing system simplifies URL mapping and improves code organization and maintenance. 2.EloquentORM provides object-oriented data operations to improve development efficiency. 3. The migration function manages the database structure through version control to ensure consistency. 4. The cache system reduces database queries and improves response speed. 5. The queue system effectively processes large-scale data, avoid blocking user requests, and improve overall performance.

Laravel's Backend Capabilities: Databases, Logic, and MoreLaravel's Backend Capabilities: Databases, Logic, and MoreApr 14, 2025 am 12:04 AM

Laravel performs strongly in back-end development, simplifying database operations through EloquentORM, controllers and service classes handle business logic, and providing queues, events and other functions. 1) EloquentORM maps database tables through the model to simplify query. 2) Business logic is processed in controllers and service classes to improve modularity and maintainability. 3) Other functions such as queue systems help to handle complex needs.

Laravel's Versatility: From Simple Sites to Complex SystemsLaravel's Versatility: From Simple Sites to Complex SystemsApr 13, 2025 am 12:13 AM

The Laravel development project was chosen because of its flexibility and power to suit the needs of different sizes and complexities. Laravel provides routing system, EloquentORM, Artisan command line and other functions, supporting the development of from simple blogs to complex enterprise-level systems.

Laravel (PHP) vs. Python: Development Environments and EcosystemsLaravel (PHP) vs. Python: Development Environments and EcosystemsApr 12, 2025 am 12:10 AM

The comparison between Laravel and Python in the development environment and ecosystem is as follows: 1. The development environment of Laravel is simple, only PHP and Composer are required. It provides a rich range of extension packages such as LaravelForge, but the extension package maintenance may not be timely. 2. The development environment of Python is also simple, only Python and pip are required. The ecosystem is huge and covers multiple fields, but version and dependency management may be complex.

Laravel and the Backend: Powering Web Application LogicLaravel and the Backend: Powering Web Application LogicApr 11, 2025 am 11:29 AM

How does Laravel play a role in backend logic? It simplifies and enhances backend development through routing systems, EloquentORM, authentication and authorization, event and listeners, and performance optimization. 1. The routing system allows the definition of URL structure and request processing logic. 2.EloquentORM simplifies database interaction. 3. The authentication and authorization system is convenient for user management. 4. The event and listener implement loosely coupled code structure. 5. Performance optimization improves application efficiency through caching and queueing.

Why is Laravel so popular?Why is Laravel so popular?Apr 02, 2025 pm 02:16 PM

Laravel's popularity includes its simplified development process, providing a pleasant development environment, and rich features. 1) It absorbs the design philosophy of RubyonRails, combining the flexibility of PHP. 2) Provide tools such as EloquentORM, Blade template engine, etc. to improve development efficiency. 3) Its MVC architecture and dependency injection mechanism make the code more modular and testable. 4) Provides powerful debugging tools and performance optimization methods such as caching systems and best practices.

Which is better, Django or Laravel?Which is better, Django or Laravel?Mar 28, 2025 am 10:41 AM

Both Django and Laravel are full-stack frameworks. Django is suitable for Python developers and complex business logic, while Laravel is suitable for PHP developers and elegant syntax. 1.Django is based on Python and follows the "battery-complete" philosophy, suitable for rapid development and high concurrency. 2.Laravel is based on PHP, emphasizing the developer experience, and is suitable for small to medium-sized projects.

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)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft