作為 php 開(kāi)發(fā)工程師,不能僅僅局限于傳統(tǒng)的 nginx+fpm 的模式,學(xué)習(xí) swoole 是一個(gè)必要的過(guò)程,可以對(duì)自身的技術(shù)棧做一個(gè)提升,學(xué)習(xí)過(guò)程中可以理解 swoole 為 php 帶來(lái)了哪些改變,為何越來(lái)越多的人擁抱 swoole,那么這篇教程就簡(jiǎn)單的講解一下如何在 laravel 中引入 swoole。
我的官方群點(diǎn)擊此處。
一. 準(zhǔn)備工作
1. 安裝 Laravel
laravel new laravel-swoole
本人使用?valet?進(jìn)行開(kāi)發(fā),可以使用
laravel-swoole.test
進(jìn)行訪問(wèn)
2. 引入 swoole
具體的 swoole 安裝請(qǐng)移步官網(wǎng)進(jìn)行下載,編譯,安裝,這里不多闡述了。
1. 在項(xiàng)目更目錄創(chuàng)建一個(gè) server 文件夾,然后在該文件夾中創(chuàng)建?http_server.php?文件,具體的文件內(nèi)容如下
<?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,
]);
//工作進(jìn)程啟動(dòng)
$http->on('WorkerStart', function ($serv, $worker_id) {
? ? //加載index文件的內(nèi)容
? ? require __DIR__ . '/../vendor/autoload.php';
? ? require_once __DIR__ . '/../bootstrap/app.php';
});
//監(jiān)聽(tīng)http請(qǐng)求
$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請(qǐng)求
? ? if (isset($request->get)) {
? ? ? ? foreach ($request->get as $k => $v) {
? ? ? ? ? ? $_GET[$k] = $v;
? ? ? ? }
? ? }
? ? //post請(qǐng)求
? ? if (isset($request->post)) {
? ? ? ? foreach ($request->post as $k => $v) {
? ? ? ? ? ? $_POST[$k] = $v;
? ? ? ? }
? ? }
? ? //文件請(qǐng)求
? ? if (isset($request->files)) {
? ? ? ? foreach ($request->files as $k => $v) {
? ? ? ? ? ? $_FILES[$k] = $v;
? ? ? ? }
? ? }
? ? //cookies請(qǐng)求
? ? if (isset($request->cookie)) {
? ? ? ? foreach ($request->cookie as $k => $v) {
? ? ? ? ? ? $_COOKIE[$k] = $v;
? ? ? ? }
? ? }
? ? ob_start();//啟用緩存區(qū)
? ? //加載laravel請(qǐng)求核心模塊
? ? $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();//獲取緩存區(qū)的內(nèi)容
? ? ob_end_clean();//清除緩存區(qū)
? ? //輸出緩存區(qū)域的內(nèi)容
? ? $response->end($res);
});
$http->start();
在路由文件加入路由:
Route::get('/test1', 'UsersController@test');
Route::get('/test2','UsersController@test2');
在控制器添加方法:
? ? /**
? ? * 測(cè)試1
? ? * @param Request $request
? ? * @return string
? ? */
? ? public function test(Request $request)
? ? {
? ? ? ? return view('test');#在你的視圖文件夾創(chuàng)建test.blade.php
? ? }
? ? /**
? ? * 測(cè)試2
? ? * @param Request $request
? ? * @return string
? ? */
? ? public function test2(Request $request)
? ? {
? ? ? ? return 'Hello World2:' . $request->get('name');
? ? }
4. 啟動(dòng) swoole
在終端下輸入:
php server/http_server.php
訪問(wèn)瀏覽器:
http://127.0.0.1:9501/test1
http://127.0.0.1:9501/test2?name=Jelly
對(duì)應(yīng)的結(jié)果如下:
訪問(wèn) test1 路由

訪問(wèn) test2 路由

更多學(xué)習(xí)內(nèi)容請(qǐng)?jiān)L問(wèn):
八重櫻:騰訊T3-T4標(biāo)準(zhǔn)精品PHP架構(gòu)師教程目錄大全,只要你看完保證薪資上升一個(gè)臺(tái)階(持續(xù)更新)?zhuanlan.zhihu.com
以上內(nèi)容希望幫助到大家,很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些問(wèn)題和瓶頸,業(yè)務(wù)代碼寫(xiě)多了沒(méi)有方向感,不知道該從那里入手去提升,對(duì)此我整理了一些資料,包括但不限于:分布式架構(gòu)、高可擴(kuò)展、高性能、高并發(fā)、服務(wù)器性能調(diào)優(yōu)、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優(yōu)化、shell腳本、Docker、微服務(wù)、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨需要的可以免費(fèi)分享給大家,需要的可以加入我的官方群點(diǎn)擊此處。