成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用swoole改造laravel應(yīng)用

cpupro / 3051人閱讀

摘要:使用改造應(yīng)用標(biāo)簽空格分隔概述介紹是為開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架。然后你可以看到以下信息現(xiàn)在可以通過(guò)訪問(wèn)來(lái)進(jìn)入應(yīng)用。

使用swoole改造laravel應(yīng)用

標(biāo)簽(空格分隔): php


1. 概述 1.1 swoole介紹

Swoole 是為 PHP 開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架。 他是一個(gè)純 C 開(kāi)發(fā)的擴(kuò)展, 他允許 PHP 開(kāi)發(fā)者在 PHP 中寫(xiě) 高性能,可擴(kuò)展的并發(fā) TCP, UDP, Unix socket, HTTP, WebSocket 服務(wù), 而不需要擁有太多的非阻塞 I/O 編程和低級(jí)別的 Linux 內(nèi)核知識(shí)。 你可以把 Swoole 想象成 Go, 但對(duì)于 PHP 來(lái)說(shuō)將有更高性能。

1.2 為什么要在 Swoole 上運(yùn)行 Laravel?

在PHP的生命周期中, 當(dāng)你每次運(yùn)行PHP腳本的時(shí)候, PHP都需要初始化模塊并為你的運(yùn)行環(huán)境啟動(dòng)zend引擎. 并將PHP腳本編譯為OpCodes以便Zend引擎執(zhí)行.

但是, 這樣的生命周期需要在每次請(qǐng)求的時(shí)候都執(zhí)行一遍, 因?yàn)閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境在請(qǐng)求結(jié)束后立即銷毀.

換句話說(shuō), 在傳統(tǒng)的PHP生命周期中, 為了腳本執(zhí)行而浪費(fèi)了大量的時(shí)間去創(chuàng)建和銷毀資源. 想象一下像laravel這樣的框架, 在每次請(qǐng)求中需要加載多少文件? 同時(shí)也浪費(fèi)了大量的I/O操作.

swoole是內(nèi)置在應(yīng)用級(jí)別的server, 并且所有腳本文件在加載一次之后便可以保存在內(nèi)存中. 這就是為什么我們需要嘗試在swoole上運(yùn)行l(wèi)aravel.

swoole可以提供強(qiáng)大性能而Laravel則可以提供優(yōu)雅代碼結(jié)構(gòu). 完美!

2. 準(zhǔn)備工作
app php laravel swoole
your.domain.com 7.1.16 5.4.36 4.1.2
2.1 wrk

基準(zhǔn)測(cè)試工具:wrk

// wrk命令參數(shù)
-c, --connections: total number of HTTP connections to keep open with
                   each thread handling N = connections/threads

-d, --duration:    duration of the test, e.g. 2s, 2m, 2h

-t, --threads:     total number of threads to use

-s, --script:      LuaJIT script, see SCRIPTING

-H, --header:      HTTP header to add to request, e.g. "User-Agent: wrk"

    --latency:     print detailed latency statistics

    --timeout:     record a timeout if a response is not received within
                   this amount of time.
2.2 php-swoole安裝

pecl install swoole

RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories 
    && sed -i "s/nl.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
RUN apk add --no-cache --virtual .build-deps 
        $PHPIZE_DEPS 
    && docker-php-source extract 
    && cd /usr/src 
    && wget http://pecl.php.net/get/swoole-4.1.2.tgz 
    && tar -xzvf swoole-4.1.2.tgz 
    && mv /usr/src/swoole-4.1.2 /usr/src/php/ext/swoole 
    && docker-php-ext-configure swoole --enable-openssl 
    && docker-php-ext-install swoole 
    && runDeps="$( 
        scanelf --needed --nobanner --format "%n#p" --recursive /usr/local 
            | tr "," "
" 
            | sort -u 
            | awk "system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }" 
      )" 
      && apk add --no-cache --virtual .php-rundeps $runDeps 
    && docker-php-source delete 
    && apk del .build-deps 
    && rm -rf /usr/src/swoole-4.1.2.tgz
2.3 laravel-swoole 擴(kuò)展安裝

以下是 swooletw/laravel-swoole 的主要特點(diǎn):

在 Swoole 運(yùn)行 Laravel/Lumen 應(yīng)用

出色的性能提升至 30x

沙盒模式隔離應(yīng)用程序容器

支持在 Laravel 應(yīng)用中運(yùn)行 WebSocket 服務(wù)器

支持 Socket.io 協(xié)議

支持 Swoole 表跨進(jìn)程共享

使用 Composer 安裝:

$ composer require swooletw/laravel-swoole
2.4 laravel/lumen配置
這個(gè)包支持包自動(dòng)發(fā)現(xiàn)機(jī)制。如果你運(yùn)行 Laravel 5.5 以上版本,你可以跳過(guò)這一步。

laravel配置: 在 config/app.php 服務(wù)提供者數(shù)組添加該服務(wù)提供者

[
    "providers" => [
        SwooleTWHttpLaravelServiceProvider::class,
    ],
]

lumen配置: 請(qǐng)將下面的代碼添加到 bootstrap/app.php

$app->register(SwooleTWHttpLumenServiceProvider::class);
3. 基準(zhǔn)測(cè)試數(shù)據(jù) 3.1 建立并運(yùn)行起來(lái)

現(xiàn)在,你可以執(zhí)行以下的命令來(lái)啟動(dòng) Swoole HTTP 服務(wù)。

php artisan swoole:http start

然后你可以看到以下信息:

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

現(xiàn)在可以通過(guò)訪問(wèn) http://127.0.0.1:1215 來(lái)進(jìn)入 Laravel 應(yīng)用。

如果需要修改端口號(hào)或服務(wù)地址, 可配置相應(yīng)的環(huán)境變量

// vendor/swooletw/laravel-swoole/config/swoole_http.php
SWOOLE_HTTP_HOST: "127.0.0.1"
SWOOLE_HTTP_PORT: "1215"

詳細(xì)的文檔參考: https://wiki.swoole.com/wiki/page/14.html

3.2 基于 FPM + Nginx 的測(cè)試結(jié)果
wrk -t4 -c100 http://your.domain.com/version

Running 10s test @ http://your.domain.com/version
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   341.64ms  108.70ms 801.47ms   69.08%
    Req/Sec    71.72     27.35   171.00     65.57%
  2864 requests in 10.03s, 2.84MB read
Requests/sec:    285.63
Transfer/sec:    289.79KB
wrk -t12 -c400 -d30s http://your.domain.com/version

Running 30s test @ http://your.domain.com/version
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   801.35ms  349.89ms   2.00s    68.56%
    Req/Sec    40.61     19.83   126.00     65.80%
  14390 requests in 30.10s, 14.24MB read
  Socket errors: connect 0, read 0, write 0, timeout 132
Requests/sec:    478.09
Transfer/sec:    484.34KB
3.3 Swoole HTTP 服務(wù)的測(cè)試結(jié)果
wrk -t4 -c100 http://your.domain.com/version

Running 10s test @ http://your.domain.com/version
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   198.64ms  324.54ms   1.96s    88.59%
    Req/Sec   225.62     91.30   430.00     62.72%
  9021 requests in 10.09s, 7.90MB read
  Socket errors: connect 0, read 0, write 0, timeout 25
Requests/sec:    893.71
Transfer/sec:    801.26KB
wrk -t12 -c400 -d30s http://your.domain.com/version

Running 30s test @ http://your.domain.com/version
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   319.84ms  398.59ms   2.00s    85.59%
    Req/Sec    66.94     35.58   240.00     66.09%
  23862 requests in 30.09s, 20.89MB read
  Socket errors: connect 0, read 0, write 0, timeout 619
Requests/sec:    793.04
Transfer/sec:    711.05KB
4. 問(wèn)題&注意事項(xiàng)

php7只能用swoole 4.0+ 版本

4.1 靜態(tài)文件使用swoole性能是否受到影響?

使用Nginx來(lái)代理運(yùn)行于Swoole上的Laravel

server {
    listen 80;
    server_name your.domain.com;
    root /path/to/laravel/public;
    index index.php;
    location = /index.php {
        # Ensure that there is no such file named "not_exists"
        # in your "public" directory.
        try_files /not_exists @swoole;
    }
    location / {
        try_files $uri $uri/ @swoole;
    }
    location @swoole {
        set $suffix "";
        if ($uri = /index.php) {
            set $suffix "/";
        }
        proxy_set_header Host $host;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # IF https
        # proxy_set_header HTTPS "on";
        proxy_pass http://127.0.0.1:1215$suffix;
    }
}
5. 參考

使用 Swoole 來(lái)加速你的 Laravel 應(yīng)用

swoole 入門(mén)指引

laravel-swoole

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30856.html

相關(guān)文章

  • 現(xiàn)代化編程 -- 在 Swoole 上開(kāi)發(fā) Laravel 框架的應(yīng)用

    摘要:是非?,F(xiàn)代化的一套框架基于的構(gòu)建方式其很多核心依賴并非完全自己所維護(hù)而依賴于等較成熟的以此實(shí)現(xiàn)現(xiàn)代化框架的集眾優(yōu)于一身站在巨人肩上的特點(diǎn)經(jīng)過(guò)前面的了解我們已經(jīng)知道給帶來(lái)的無(wú)可比擬的優(yōu)勢(shì)但因?yàn)橐恍┚窒尬覀儫o(wú)法將其直接用于成熟的框架而需要進(jìn)行 Laravel Laravel 是非常現(xiàn)代化的一套 PHP 框架, 基于 composer 的構(gòu)建方式, 其很多核心依賴并非完全 Laravel 自...

    leap_frog 評(píng)論0 收藏0
  • Laravel 5.6中 使用Swoole的協(xié)程數(shù)據(jù)庫(kù)查詢

    摘要:首先,確認(rèn)你是用的是然后,你需要依賴這個(gè)包,作用是實(shí)現(xiàn)的偽接口將修改成在你的命令中啟動(dòng),測(cè)試下帶有數(shù)據(jù)庫(kù)查詢的接口。如至此,你的項(xiàng)目的協(xié)程化改造成功。 Installation 首先,確認(rèn)你是用的是laravel 5.6 然后,你需要依賴 kuaiapp/db 這個(gè)包,作用是實(shí)現(xiàn) SwooleCoroutineMySQL 的偽 PDO 接口 composer require kuai...

    roundstones 評(píng)論0 收藏0
  • 了解swoole運(yùn)行模式,加速laravel應(yīng)用

    摘要:負(fù)責(zé)解釋執(zhí)行文件生成響應(yīng),最終返回給,展現(xiàn)至前端。相比于傳統(tǒng)架構(gòu),進(jìn)程模型最大的特點(diǎn)在于其多線程模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)大量連接。這要求開(kāi)發(fā)人員對(duì)于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識(shí)更容易內(nèi)存泄露。 一、SwooleSwoole號(hào)稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時(shí)飛 評(píng)論0 收藏0
  • 使用 Swoole 來(lái)加速你的 Laravel 應(yīng)用

    摘要:是為開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架。因?yàn)閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境在請(qǐng)求執(zhí)行結(jié)束后會(huì)立即銷毀。可以提供強(qiáng)大性能而則可以提供優(yōu)雅代碼結(jié)構(gòu)使用。在使用這個(gè)包之前,請(qǐng)確保你的機(jī)器安裝了正確的。建立并運(yùn)行起來(lái)現(xiàn)在,你可以執(zhí)行以下的命令來(lái)啟動(dòng)服務(wù)。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開(kāi)發(fā)的生產(chǎn)級(jí)異...

    snifes 評(píng)論0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因?yàn)闉閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境將在請(qǐng)求過(guò)程完成后立即銷毀??梢猿蔀閺?qiáng)大的性能增強(qiáng)器,提供了優(yōu)雅的結(jié)構(gòu)和代碼使用方式。你可以使用此命令快速安裝它,并訪問(wèn)官方網(wǎng)站獲取更多信息。注意目前僅支持和。服務(wù)器不能使用?;鶞?zhǔn)測(cè)試使用進(jìn)行干凈的測(cè)試。 Swoole 是針對(duì)PHP的生產(chǎn)級(jí)異步編程框架。它是一種用純C語(yǔ)言編寫(xiě)的PHP擴(kuò)展,它使PHP開(kāi)發(fā)人員能夠在PHP中編寫(xiě)高性能,可擴(kuò)展的并發(fā)TCP,UDP,U...

    didikee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<