Laravel 整合 Swoole 教程

LaravelChen發表於2018-06-12

作為php開發工程師,不能僅僅侷限於傳統的nginx+fpm的模式,學習swoole是一個必要的過程,可以對自身的技術棧做一個提升,學習過程中可以理解swoole為php帶來了哪些改變,為何越來越多的人擁抱swoole,那麼這篇教程就簡單的講解一下如何在laravel中引入swoole。

1.可以關注一下本人

網站https://laravelchen.com/
githubhttps://github.com/LaravelChen
swoole教程https://laravelchen.com/series/24

2.準備工作

1.安裝Laravel

laravel new laravel-swoole

本人使用valet進行開發,可以使用

laravel-swoole.test

進行訪問

3.引入swoole

具體的swoole安裝請移步官網進行下載,編譯,安裝,這裡不多闡述了。

1.在專案更目錄建立一個server資料夾,然後在該資料夾中建立http_server.php檔案,具體的檔案內容如下

 <?php
$http = new swoole_http_server('127.0.0.1', 9501);

$http->set([
    'worker_num' => 8,
    'max_request' => 5000,
//    'document_root' => '/Users/apple/Code/Teacher_Project/swoole_live/resources/live/',
//    'enable_static_handler' => true,
]);

//工作程式啟動
$http->on('WorkerStart', function ($serv, $worker_id) {
    //載入index檔案的內容
    require __DIR__ . '/../vendor/autoload.php';
    require_once __DIR__ . '/../bootstrap/app.php';
});

//監聽http請求
$http->on('request', function ($request, $response) {

    //server資訊
    if (isset($request->server)) {
        foreach ($request->server as $k => $v) {
            $_SERVER[strtoupper($k)] = $v;
        }
    }

    //header頭資訊
    if (isset($request->header)) {
        foreach ($request->header as $k => $v) {
            $_SERVER[strtoupper($k)] = $v;
        }
    }

    //get請求
    if (isset($request->get)) {
        foreach ($request->get as $k => $v) {
            $_GET[$k] = $v;
        }
    }

    //post請求
    if (isset($request->post)) {
        foreach ($request->post as $k => $v) {
            $_POST[$k] = $v;
        }
    }

    //檔案請求
    if (isset($request->files)) {
        foreach ($request->files as $k => $v) {
            $_FILES[$k] = $v;
        }
    }

    //cookies請求
    if (isset($request->cookie)) {
        foreach ($request->cookie as $k => $v) {
            $_COOKIE[$k] = $v;
        }
    }

    ob_start();//啟用快取區

    //載入laravel請求核心模組
    $kernel = app()->make(Illuminate\Contracts\Http\Kernel::class);
    $laravelResponse = $kernel->handle(
        $request = Illuminate\Http\Request::capture()
    );
    $laravelResponse->send();
    $kernel->terminate($request, $laravelResponse);

    $res = ob_get_contents();//獲取快取區的內容
    ob_end_clean();//清除快取區

    //輸出快取區域的內容
    $response->end($res);
});

$http->start();

在路由檔案加入路由:

Route::get('/test1', 'UsersController@test');
Route::get('/test2','UsersController@test2');

在控制器新增方法:

    /**
     * 測試1
     * @param Request $request
     * @return string
     */
    public function test(Request $request)
    {
        return view('test');#在你的檢視資料夾建立test.blade.php
    }

    /**
     * 測試2
     * @param Request $request
     * @return string
     */
    public function test2(Request $request)
    {
        return 'Hello World2:' . $request->get('name');
    }

4.啟動swoole

在終端下輸入:

php server/http_server.php

訪問瀏覽器:

http://127.0.0.1:9501/test1
http://127.0.0.1:9501/test2?name=Jelly

對應的結果如下:
訪問test1路由

訪問test2路由

本作品採用《CC 協議》,轉載必須註明作者和本文連結

LaravelChen

相關文章