CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

23 April, 2021

Speed Up Laravel on Top of Swoole

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

 

Speed Up Laravel on Top of Swoole

Swoole is a production-grade async programming framework for PHP. It is a PHP extension written in pure C language, which enables PHP developers to write high-performance, scalable, concurrent TCP, UDP, Unix socket, HTTP, WebSocket services in PHP without too much knowledge of the non-blocking I/O programming and low-level Linux kernel. You can think of Swoole as something like NodeJS but for PHP, with higher performance.

Why run Laravel on Swoole?

The image below illustrates the lifecycle in PHP. As you can see, when you run php script every time, PHP needs to initialize modules and launch Zend Engine for your running environment. And your PHP script needs to be compiled to OpCodes for Zend Engine’s execution.

However, this lifecycle needs to go over and over again in each request. Because the environment created for a single request will be immediately destroyed after the request process is done.

In other words, in traditional PHP lifecycle, it wastes a bunch of time building and destroying resources for your script execution. And imagine in frameworks like Laravel, how many files does it need to load for one request? There’s a lot of I/O consumption for loading files as well.

PHP Lifecycle

So what if we have a built-in server on top of Swoole, and all the scripts can be kept in memory after the first load? This is why we try to run Laravel on Swoole. Swoole can be a powerful performance booster and Laravel provides the elegant structure and code usages. That’s a perfect combination!

Installation

Here are the main features of swooletw/laravel-swoole:

  • Run Laravel/Lumen application on top of Swoole.
  • Outstanding performance boosting up to 30x.
  • Sandbox mode to isolate app container.
  • Support running WebSocket server in Laravel.
  • Support Socket.io protocol.
  • Support Swoole table for cross-process data sharing.

Require this package with Composer:

$ composer require swooletw/laravel-swoole

This package relies on Swoole extension. Make sure you’ve installed Swoole before you use this package. Using this command to install it quickly:

pecl install swoole

After installing the extension, you will need to edit php.ini and add an extension=swoole.so line before you use it.

php -i | grep php.ini                      # check the php.ini file location
sudo echo "extension=swoole.so" >> php.ini # add the extension=swoole.so to the end of php.ini
php -m | grep swoole # check if the swoole extension has been enabled

Visit the official website for more information.

Notice: Swoole currently only supports Linux and OSX. Windows servers are not able to use Swoole yet.

Then, add the service provider:

If you are using Laravel, add the service provider to the provider’s array in config/app.php:

[
'providers' => [
SwooleTW\Http\LaravelServiceProvider::class,
],
]

If you are using Lumen, append the following code to bootstrap/app.php:

$app->register(SwooleTW\Http\LumenServiceProvider::class);

It supports package auto discovery. If you’re running Laravel 5.5, you can skip this step.

Up and Running

Now, you can run the following command to start Swoole HTTP server.

$ php artisan swoole:http start

Then you can see the following message:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>

Now you can access your Laravel application on http://127.0.0.1:1215.

Benchmark

Test with clean Lumen 5.5, using MacBook Air 13, 2015.
Benchmarking Tool: wrk

wrk -t4 -c100 http://your.app

Nginx with FPM

Running 10s test @ http://lumen.app:9999
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.14s 191.03ms 1.40s 90.31%
Req/Sec 22.65 10.65 50.00 65.31%
815 requests in 10.07s, 223.65KB read
Requests/sec: 80.93
Transfer/sec: 22.21KB

Swoole HTTP Server

Running 10s test @ http://127.0.0.1:1215
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 11.58ms 4.74ms 68.73ms 81.63%
Req/Sec 2.19k 357.43 2.90k 69.50%
87879 requests in 10.08s, 15.67MB read
Requests/sec: 8717.00
Transfer/sec: 1.55MB

  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Generate Migrations from an Existing Database With the Migration Generator Package
    Laravel Migration Generator Migration Generator for Laravel is a package by Bennett Treptow to generate migrations from existing database ...
  • 'Ramayana' to have 'Baahubali'-style cliffhanger ending
    image/jpeg https://timesofindia.indiatimes.com/entertainment/hindi/bollywood/news/ramayana-to-end-on-baahubali-style-cliffhanger-director-ni...
  • Vijay talks about being harassed in an uncomfortable encounter with a model coordinator
    image/jpeg https://timesofindia.indiatimes.com/entertainment/hindi/bollywood/news/he-was-getting-touchy-feely-vijay-varma-opens-up-about-bei...
  • Vue.js Events
      In Vue.js, Events are used to respond to an action. Suppose, you have to build a dynamic website using Vue.js then you'll most likely ...
  • 'Spider-Man: Brand New Day' records Rs 300 crore weekend in India
    image/jpeg https://timesofindia.indiatimes.com/entertainment/english/hollywood/box-office/spider-man-brand-new-day-box-office-collection-day...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • ►  2026 (117)
    • ►  08/02 - 08/09 (8)
    • ►  07/26 - 08/02 (108)
    • ►  06/28 - 07/05 (1)
  • ►  2025 (4)
    • ►  07/06 - 07/13 (2)
    • ►  06/29 - 07/06 (2)
  • ►  2024 (486)
    • ►  09/15 - 09/22 (30)
    • ►  09/08 - 09/15 (35)
    • ►  09/01 - 09/08 (35)
    • ►  08/11 - 08/18 (2)
    • ►  08/04 - 08/11 (33)
    • ►  07/28 - 08/04 (30)
    • ►  07/07 - 07/14 (11)
    • ►  06/30 - 07/07 (35)
    • ►  06/23 - 06/30 (5)
    • ►  06/02 - 06/09 (31)
    • ►  05/26 - 06/02 (20)
    • ►  05/05 - 05/12 (29)
    • ►  04/28 - 05/05 (26)
    • ►  04/07 - 04/14 (10)
    • ►  03/31 - 04/07 (34)
    • ►  03/24 - 03/31 (10)
    • ►  03/03 - 03/10 (35)
    • ►  02/25 - 03/03 (15)
    • ►  02/04 - 02/11 (22)
    • ►  01/28 - 02/04 (30)
    • ►  01/07 - 01/14 (8)
  • ►  2023 (484)
    • ►  12/31 - 01/07 (35)
    • ►  12/24 - 12/31 (10)
    • ►  12/03 - 12/10 (33)
    • ►  11/26 - 12/03 (20)
    • ►  11/05 - 11/12 (35)
    • ►  10/29 - 11/05 (20)
    • ►  10/22 - 10/29 (9)
    • ►  10/15 - 10/22 (7)
    • ►  10/08 - 10/15 (9)
    • ►  10/01 - 10/08 (10)
    • ►  09/24 - 10/01 (9)
    • ►  09/17 - 09/24 (9)
    • ►  09/10 - 09/17 (7)
    • ►  09/03 - 09/10 (9)
    • ►  08/27 - 09/03 (9)
    • ►  08/20 - 08/27 (8)
    • ►  08/13 - 08/20 (8)
    • ►  08/06 - 08/13 (8)
    • ►  07/30 - 08/06 (8)
    • ►  07/23 - 07/30 (7)
    • ►  07/16 - 07/23 (8)
    • ►  07/09 - 07/16 (7)
    • ►  07/02 - 07/09 (8)
    • ►  06/25 - 07/02 (7)
    • ►  06/18 - 06/25 (7)
    • ►  06/11 - 06/18 (7)
    • ►  06/04 - 06/11 (11)
    • ►  05/28 - 06/04 (7)
    • ►  05/21 - 05/28 (8)
    • ►  05/14 - 05/21 (11)
    • ►  05/07 - 05/14 (7)
    • ►  04/30 - 05/07 (7)
    • ►  04/23 - 04/30 (8)
    • ►  04/16 - 04/23 (9)
    • ►  04/09 - 04/16 (7)
    • ►  04/02 - 04/09 (4)
    • ►  03/26 - 04/02 (21)
    • ►  03/19 - 03/26 (2)
    • ►  03/12 - 03/19 (9)
    • ►  03/05 - 03/12 (26)
    • ►  02/26 - 03/05 (25)
    • ►  01/15 - 01/22 (7)
    • ►  01/08 - 01/15 (1)
  • ►  2022 (1037)
    • ►  12/11 - 12/18 (13)
    • ►  12/04 - 12/11 (1)
    • ►  11/27 - 12/04 (40)
    • ►  11/06 - 11/13 (1)
    • ►  10/16 - 10/23 (13)
    • ►  09/04 - 09/11 (5)
    • ►  08/21 - 08/28 (24)
    • ►  08/14 - 08/21 (24)
    • ►  07/03 - 07/10 (9)
    • ►  06/19 - 06/26 (3)
    • ►  05/29 - 06/05 (3)
    • ►  05/22 - 05/29 (3)
    • ►  05/15 - 05/22 (109)
    • ►  05/01 - 05/08 (7)
    • ►  04/24 - 05/01 (7)
    • ►  04/17 - 04/24 (64)
    • ►  04/10 - 04/17 (115)
    • ►  04/03 - 04/10 (73)
    • ►  03/27 - 04/03 (77)
    • ►  03/13 - 03/20 (2)
    • ►  03/06 - 03/13 (25)
    • ►  02/27 - 03/06 (18)
    • ►  02/20 - 02/27 (153)
    • ►  02/13 - 02/20 (187)
    • ►  01/30 - 02/06 (45)
    • ►  01/23 - 01/30 (15)
    • ►  01/16 - 01/23 (1)
  • ▼  2021 (412)
    • ►  10/24 - 10/31 (2)
    • ►  07/25 - 08/01 (1)
    • ►  07/11 - 07/18 (10)
    • ►  06/13 - 06/20 (29)
    • ►  05/23 - 05/30 (1)
    • ►  05/02 - 05/09 (24)
    • ►  04/25 - 05/02 (24)
    • ▼  04/18 - 04/25 (112)
      • Query Tracer Package
      • Blogify – Add a blog to an existing Laravel App
      • Laravel API Generator
      • Laravel Angular Admin Starter Kit
      • Laravel Analytics v2
      • Laravel and Elasticsearch
      • Easily Integrate HTTP 2 Server Push with a Laravel...
      • Easily Test Email with MailThief
      • New Community Project: Laravel Notification Channels
      • Laravel Scout is now open for developer testing
      • TNTSearch Driver is now available for Laravel Scout
      • Laravel Passport – Easily setup your own OAuth2 se...
      • Easily deleting old soft-deleted records with Quic...
      • Laravel Lambo – A package to quickly scaffold out ...
      • Improved model generation with Laracademy Generators
      • Edit your environment files through the browser wi...
      • Laravel Uptime Monitor
      • View your routes through the browser with the Pret...
      • Laravel Blade SVG Directive
      • Laravel Missing Page Redirector Package
      • Laravel Charting Package
      • Build your own Slack Bot with this PHP library
      • Store your translations in the database with Larav...
      • Build Custom Admin Panels With Backpack for Laravel
      • Easily Create Stripe Tokens and Cards For Testing
      • Laravel Countries and Currencies Package
      • Laravel Decomposer – List your dependencies and en...
      • Laravel Package To Login As Other Users During Dev...
      • Laravel OPcache Package
      • LaraCSV – Generate CSV files from your Eloquent mo...
      • Interactive Make Command
      • Laravel Language Manager
      • Interactive Make Command
      • Laravel Sketchpad
      • Invisible reCAPTCHA Integration with Laravel
      • Partyline is a new package that allows you to outp...
      • Bring Laravel Collections to JavaScript with Colle...
      • Homeboy Allows You to Automate Adding Sites to Hom...
      • Bouncer a Laravel Package for Role and Ability Aut...
      • Two Best Laravel Packages to Manage Roles Permissions
      • Track Laravel Model Changes with Laravel Auditing
      • BotMan 2.0 PHP Chatbot Framework
      • Laravel Shareable Models Package
      • Appstract Laravel Blade Directives
      • Laravel Stats Code Statistics for your Laravel Pro...
      • Protect your webhooks with Laravel Shield
      • Collision Is An Error Handler Framework for Consol...
      • Bootstrap Laravel 5 Packages with Bootpack
      • Reload Your Laravel Tinker Session with Tinx
      • Continuous Testing Dashboard for Laravel
      • Vessel is a Lightweight Docker Environment for Lar...
      • A Package for Laravel Blade Extension Classes
      • Bootstrap 4 Laravel Preset for Laravel 5.5
      • A Zero-config Purgecss Wrapper for Laravel Mix
      • Beautiful PHP CLI Menus for Laravel Artisan Commands
      • Under Construction Package
      • Laravel Model Caching Package: Model-caching made ...
      • Add a Check For Pwned Passwords In Your Laravel Fo...
      • Guzzle Advanced Throttling Middleware and Laravel ...
      • Laravel Excel 3.0
      • PHPUnit Pretty Result Printer Package
      • Laravel Log Enhancer Package
      • Laravel Page Cache for Lightning Fast Page Loads
      • HTTP Cache Packages for Laravel
      • Cascading Soft Deletes with Laravel 5
      • Count Models With the Laravel Visits Package
      • Laravel View X-Ray
      • Laravel Love Likes and Dislikes for Eloquent Models
      • Laravel Befriended
      • Speed Up Laravel on Top of Swoole
      • Laravel Schemaless Attributes Package
      • Laravel Credentials Package for Encrypted Applicat...
      • Eloquent Sluggable Package
      • Use Laravel GeoIP to Determine Users’ Geographical...
      • A Stand-Alone Laravel Slack Package
      • Plug and Play Avatars in Laravel with Laravolt
      • Laravel JSON – A Simple Wrapper Around JSON for Ca...
      • Laravel Localization Package for Vue
      • Laravel Breadcrumbs Package
      • Automatically Open Files on Artisan “Make” Commands
      • Eventy WordPress-like Actions and Filters for Laravel
      • Laravel Tenancy – Multi-Tenant Package for Laravel
      • Laravel Self-Diagnosis Package
      • Laravel Relationship Events
      • Laravel Enum Package
      • LaRecipe: Documentation with Markdown in Your Lara...
      • Laratables Ajax support of DataTables in Laravel
      • Luhn Algorithm Package for Laravel
      • Laravel View Models
      • Laravel Mail Viewer
      • Laravel Proximage A Handy Package for Proxying Images
      • Laravel Database Hashing Package
      • Laravel Tag Helper
      • PHP Semantic Versioning Helper
      • Laravel WebSockets Package Released
      • Accountant Laravel Package
      • Five Hidden Features of the Laravel Excel Package
      • Laravel Mailbox
      • Subdomain Multitenency Package for Laravel
      • Laravel Options Package
      • Laravel Favicon Package
      • Laravel Tinker Server Package
      • Snipe Migrations Laravel Package
      • PHPUnit SpeedTrap
      • Customizing Stubs in Laravel
      • Bagisto E-commerce Platform
      • GitDown Parsing Markdown in PHP
      • Laravel Personal Data Export
      • Laravel HATEOAS Package
      • Register Multilingual Routes in Laravel
      • Laravel Queue Driver for RabbitMQ
      • Laravel Cashier Mollie V1 Is Now Available
    • ►  04/11 - 04/18 (1)
    • ►  04/04 - 04/11 (6)
    • ►  03/28 - 04/04 (86)
    • ►  03/21 - 03/28 (19)
    • ►  03/14 - 03/21 (2)
    • ►  03/07 - 03/14 (10)
    • ►  02/28 - 03/07 (1)
    • ►  02/21 - 02/28 (29)
    • ►  02/14 - 02/21 (13)
    • ►  02/07 - 02/14 (12)
    • ►  01/31 - 02/07 (6)
    • ►  01/17 - 01/24 (2)
    • ►  01/10 - 01/17 (8)
    • ►  01/03 - 01/10 (14)
  • ►  2020 (376)
    • ►  12/27 - 01/03 (37)
    • ►  12/20 - 12/27 (92)
    • ►  12/13 - 12/20 (29)
    • ►  12/06 - 12/13 (37)
    • ►  11/29 - 12/06 (4)
    • ►  11/15 - 11/22 (14)
    • ►  11/08 - 11/15 (8)
    • ►  11/01 - 11/08 (2)
    • ►  10/18 - 10/25 (14)
    • ►  10/11 - 10/18 (16)
    • ►  10/04 - 10/11 (10)
    • ►  09/20 - 09/27 (10)
    • ►  09/06 - 09/13 (19)
    • ►  08/30 - 09/06 (26)
    • ►  08/23 - 08/30 (4)
    • ►  08/16 - 08/23 (2)
    • ►  07/12 - 07/19 (48)
    • ►  05/17 - 05/24 (2)
    • ►  01/05 - 01/12 (2)
  • ►  2019 (74)
    • ►  07/07 - 07/14 (6)
    • ►  06/16 - 06/23 (6)
    • ►  02/10 - 02/17 (17)
    • ►  01/13 - 01/20 (37)
    • ►  01/06 - 01/13 (8)
  • ►  2018 (376)
    • ►  12/30 - 01/06 (24)
    • ►  12/16 - 12/23 (8)
    • ►  12/09 - 12/16 (98)
    • ►  12/02 - 12/09 (16)
    • ►  11/18 - 11/25 (36)
    • ►  11/04 - 11/11 (18)
    • ►  10/28 - 11/04 (10)
    • ►  10/21 - 10/28 (26)
    • ►  10/14 - 10/21 (52)
    • ►  10/07 - 10/14 (4)
    • ►  09/30 - 10/07 (2)
    • ►  09/23 - 09/30 (68)
    • ►  09/16 - 09/23 (4)
    • ►  09/09 - 09/16 (4)
    • ►  08/26 - 09/02 (6)

Data Publish News

Loading...

Al Jazeera – Breaking News, World News and Video from Al Jazeera

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda