1. 程式人生 > 實用技巧 >[Swoole] 結合 Laravel 與 Swoole,更簡易的開發與佈署!

[Swoole] 結合 Laravel 與 Swoole,更簡易的開發與佈署!

構想

Swoole 實現了 HTTP Server,也就是說 PHP 的佈署不再需要依賴 Nginx 或 Apache 這樣的網頁伺服器,也不需要靠著 PHP-FPM 或 PHP_mod 才能與 Web Server 溝通。

安裝了 Swoole extension 後的 PHP,就像 golang 那般內建高效率的 HTTP Server。

甚至,只要用一個簡單的 Dockerfile 就可以實現佈署的流程,再也不需要 link nginx 又 link php-fpm,把 Dockerfile 弄得跟蜘蛛網一樣複雜。

只要一個 Dockerfile,就能夠完成 Web Server 跟應用程式佈署,多開心吶。

FROM php:cli
COPY project /var/www/project

CMD ["php", "/var/www/project/index.php"]

結合 Laravel?

說到底,如果用了 Swoole 還得重複造輪子,那這玩意還是沒啥用。

可是如果它能夠結合當今最火紅的 PHP Web Framework:Laravel,我想一切都不太一樣了。

實作

Step 1. 取得 Laravel

先從 github 上 clone 最新版本的 laravel 下來。

Step 2. 修改 index.php

Laravel 的程式進入點位於 public/index.php

我們也只會變更到這個檔案

原本的檔案(移除註解):

<?php
require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

修改過後:

<?php
require dirname(__DIR__).'/bootstrap/autoload.php';

// IP 跟 Port 可以自行調整
// 如果要監聽全部介面可以用 0.0.0.0
// port 小於 1024 需要 root 許可權
$http = new Swoole\Http\Server('127.0.0.1', 9000);

$http->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    /**
     * @var \Illuminate\Foundation\Application $app
     * @var \Illuminate\Contracts\Http\Kernel $kernel
     * @var \Illuminate\Http\Request $laravelRequest
     * @var \Illuminate\Http\Response $laravelResponse
     */
    $app = require dirname(__DIR__).'/bootstrap/app.php';
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

    $laravelResponse = $kernel->handle(
        $laravelRequest = new \Illuminate\Http\Request(
            $request->get ?? [],
            $request->post ?? [],
            [],
            $request->cookie ?? [],
            $request->files ?? [],
            $request->server ?? []
        )
    );

    $kernel->terminate($laravelRequest, $laravelResponse);

    $response->status($laravelResponse->getStatusCode());
    $response->write($laravelResponse->getContent());

    unset(
        $app,
        $kernel,
        $laravelResponse,
        $laravelRequest
    );
});

$http->start();

執行

php public/index.php 即可啟動

啟動前別忘了要設定好 .env


更多學習內容可以訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可擴充套件、高效能、高併發、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家,需要的可以加入我的PHP技術交流群953224940

進階PHP月薪30k>>>架構師成長路線【視訊、面試文件免費獲取】