Artikel ini akan memberi anda pengetahuan yang berkaitan tentang Laravel dan Swoole Kandungan utama adalah untuk mengajar anda cara menukar Laravel kepada versi Swoole (cuba belajar, tidak disyorkan untuk menukar projek sedia ada). lihat bersama-sama. Saya harap ia akan berguna kepada semua orang.
Kata Pengantar
Tidak disyorkan untuk persekitaran pengeluaran
Buat projek laravel baharu
laravel new swoole-laravel
Tukar Laravel kepada versi Swoole
Buat fail swoole_server.php dalam direktori root Laravel, dan kemudian salin kod dalam public/index.php ke atas [Pembelajaran yang disyorkan: laravel Tutorial video ]
<?php use Illuminate\Contracts\Http\Kernel; use Illuminate\Http\Request; define('LARAVEL_START', microtime(true)); require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class); $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response);
Langkah pertama ialah memuatkan fail rangka kerja, dan ia harus dimuatkan dalam proses utama Tidak perlu sub-proses atau coroutine untuk memuatkannya berulang kali. . Oleh itu, keperluan di atas tidak perlu disentuh.
Langkah kedua ialah memulakan perkhidmatan HTTP Swoole Perkara ini telah disebut berkali-kali sebelum ini.
$http = new Swoole\Http\Server('0.0.0.0', 9501); $http->on('Request', function ($req, $res) use($app) { try { $kernel = $app->make(Kernel::class); $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response); }catch(\Exception $e){ print_r($e->getMessage()); } }); echo "服务启动", PHP_EOL; $http->start();
Adakah ini baik-baik saja? Apa kata anda mencubanya dahulu. Dalam keadaan biasa, anda mungkin tidak boleh mendapatkan sebarang input atau output Mengapa ini?
Langkah ketiga ialah menyelesaikan masalah input Sebenarnya, pembolehubah super global tidak berfungsi dalam Swoole, jadi pembolehubah seperti $_GET akan menjadi tidak sah dan objek berkaitan Permintaan dalam Laravel tidak akan dapat. mendapatkan data. Apa yang perlu dilakukan? Kami hanya mendapatkan data ini daripada parameter onRequest dan kemudian memasukkannya semula ke dalam $_GET dalam coroutine proses semasa.
$http->on('Request', function ($req, $res) use($app) { $_SERVER = []; if(isset($req->server)){ foreach($req->server as $k => $v){ $_SERVER[strtoupper($k)] = $v; } } $_GET = []; if(isset($req->get)){ foreach ($req->get as $k => $v){ $_GET[$k] = $v; } } $_POST = []; if(isset($req->post)){ foreach ($req->post as $k => $v){ $_POST[$k] = $v; } } try { $kernel = $app->make(Kernel::class); $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response); }catch(\Exception $e){ print_r($e->getMessage()); } });
Tiga keping kod di atas menyelesaikan masalah $_SERVER, $_GET dan $_POST masing-masing. Sekarang jika anda mencuba lagi, parameter boleh diterima, tetapi mengapa output dicetak pada konsol?
Langkah keempat ialah menyelesaikan masalah output, letakkan semua output dalam bingkai ke dalam penimbal keluaran, dan kemudian gunakan Respons Swoole untuk kembali.
$http->on('Request', function ($req, $res) use($app) { $_SERVER = []; if(isset($req->server)){ foreach($req->server as $k => $v){ $_SERVER[strtoupper($k)] = $v; } } $_GET = []; if(isset($req->get)){ foreach ($req->get as $k => $v){ $_GET[$k] = $v; } } $_POST = []; if(isset($req->post)){ foreach ($req->post as $k => $v){ $_POST[$k] = $v; } } //把返回放到一个缓冲区里 ob_start(); try { $kernel = $app->make(Kernel::class); $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response); }catch(\Exception $e){ print_r($e->getMessage()); } $ob = ob_get_contents(); ob_end_clean(); $res->end($ob); });
Kandungan ob_start () terakhir juga adalah apa yang telah kami pelajari sebelum ini, jadi kami tidak akan menerangkannya dengan lebih lanjut.
Semua kod
start();
Pada ketika ini, transformasi rangka kerja kami yang paling mudah selesai, mari cuba kesannya.
Jalankan
php swoole_server.php
Lawati
http://47.113.xxx.xx:9501/
Cuba kesan coroutine
Tentukan laluan dahulu. Atau kita boleh terus mengubah suai laluan lalai.
Route::get('/', function () { echo Swoole\Coroutine::getCid(), "<br/>"; print_r(Swoole\Coroutine::stats()); Swoole\Coroutine::sleep(10); echo "<br/>"; echo getmypid(), "<br/>"; // return view('welcome'); });
Sebilangan besar perkara dicetak, tetapi semuanya mesti biasa, dua yang pertama ialah output ID coroutine dan maklumat coroutine, dan kemudian kami SwooleCoroutine::sleep () selama 10 saat, dan. kemudian cetak Berikut ialah ID proses.
Kemudian kami membuka penyemak imbas dan bersedia untuk mengakses kedua-dua tab bersama-sama.
// 第一个访问的页面 1 Array ( [event_num] => 2 [signal_listener_num] => 0 [aio_task_num] => 0 [aio_worker_num] => 0 [aio_queue_size] => 0 [c_stack_size] => 2097152 [coroutine_num] => 1 [coroutine_peak_num] => 1 [coroutine_last_cid] => 1 ) 1468 // 第二个访问的页面 2 Array ( [event_num] => 2 [signal_listener_num] => 0 [aio_task_num] => 0 [aio_worker_num] => 0 [aio_queue_size] => 0 [c_stack_size] => 2097152 [coroutine_num] => 2 [coroutine_peak_num] => 2 [coroutine_last_cid] => 2 ) 1468
Adakah anda melihatnya? Setiap acara onRequest sebenarnya membuka coroutine baharu untuk mengendalikan permintaan, jadi ID coroutine mereka adalah berbeza. Pada masa yang sama, permintaan kedua tidak akan menunggu sehingga 20 saat untuk kembali kerana permintaan pertama disekat. Akhir sekali, dalam status coroutine, kita juga melihat bahawa terdapat dua coroutine_nums dipaparkan dalam permintaan kedua, menunjukkan bahawa pada masa ini terdapat dua tugas pemprosesan coroutine. Pada akhirnya, proses adalah sama, semuanya mengikut proses yang sama.
Cuba kesan berbilang proses
Secara lalai, kod di atas ialah proses utama dan proses Pekerja, dan kemudian menggunakan keupayaan coroutine. Malah, kesan ini boleh membunuh kesan PHP-FPM biasa dengan serta-merta. Tetapi kita perlu menggunakan sepenuhnya prestasi mesin berbilang teras, iaitu, kita mendayakan pelbagai proses dan menggunakan mod pemprosesan berbilang proses dan berbilang coroutine yang sangat berkuasa. Cara paling mudah ialah dengan menetapkan terus bilangan pekerja proses untuk perkhidmatan HTTP.
$http->set(array( 'worker_num' => 4, // 'worker_num' => 1,单进程 ));
Sekarang jalankan pelayan dan anda boleh melihat beberapa lagi proses. Kemudian kami mencipta laluan ujian baharu
Route::get('/a', function () { echo Swoole\Coroutine::getCid(), "<br/>"; print_r(Swoole\Coroutine::stats()); echo "<br/>"; echo getmypid(), "<br/>"; });
Sekarang lawati halaman utama dan halaman /a ini sekali lagi.
// 首页一 1 Array ( [event_num] => 2 [signal_listener_num] => 0 [aio_task_num] => 0 [aio_worker_num] => 0 [aio_queue_size] => 0 [c_stack_size] => 2097152 [coroutine_num] => 1 [coroutine_peak_num] => 1 [coroutine_last_cid] => 1 ) 1562 // 首页二 1 Array ( [event_num] => 2 [signal_listener_num] => 0 [aio_task_num] => 0 [aio_worker_num] => 0 [aio_queue_size] => 0 [c_stack_size] => 2097152 [coroutine_num] => 1 [coroutine_peak_num] => 1 [coroutine_last_cid] => 1 ) 1563 // /a 页面 1 Array ( [event_num] => 2 [signal_listener_num] => 0 [aio_task_num] => 0 [aio_worker_num] => 0 [aio_queue_size] => 0 [c_stack_size] => 2097152 [coroutine_num] => 1 [coroutine_peak_num] => 1 [coroutine_last_cid] => 1 ) 1564
Tidak, ID proses mereka berbeza Jika tiada sekatan, proses akan ditukar terlebih dahulu Jika semua proses disekat, coroutine akan dibuat dalam gelung untuk pemprosesan dalam proses.
Atas ialah kandungan terperinci Cuba cara menukar Laravel kepada versi Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Dokumentasi Cina Laravel 5.8 menyediakan panduan yang komprehensif dan mendalam mengenai konsep teras, ciri, dan amalan terbaik rangka kerja, termasuk asas, pembangunan web, beratur dan penjadualan, ujian, dan penempatan. Dokumentasi ini menyediakan contoh khusus, dikemas kini tepat pada masanya, mudah digunakan, dan boleh diakses melalui laman web rasmi.

Untuk belajar Laravel 6, anda boleh mendapatkan tutorial video dari Laracasts (disyorkan), dokumentasi rasmi dan YouTube. Kursus yang disyorkan termasuk Laracasts '"Laravel 6 dari pemula ke penguasaan" dan "tutorial rasmi Laravel 6" yang dihasilkan oleh pasukan rasmi. Apabila memilih kursus video, pertimbangkan tahap kemahiran, gaya pengajaran, pengalaman projek dan kekerapan kemas kini.

Untuk memasang Laravel, ikuti langkah -langkah berikut dalam urutan: Pasang komposer (untuk macOS/linux dan windows) Pasang pemasang Laravel Buat aplikasi akses perkhidmatan permulaan projek baru (URL: http://127.0.0.1:8000) Sediakan sambungan pangkalan data (jika diperlukan)

Laravel 5 Analisis mendalam mendedahkan seni bina dan komponen terasnya yang kuat: corak reka bentuk MVC, penghalaan, suntikan pergantungan, peristiwa, giliran, dan pengesahan. Dengan menganalisis kod, pemaju dapat memperoleh pemahaman tentang pelaksanaan rangka kerja, termasuk definisi penghalaan, pemprosesan pengawal, interaksi model, rendering paparan, pengurusan pergantungan, sistem acara, tugas tak segerak, dan pengesahan data. Ini membantu pemaju menyesuaikan, mengembangkan rangka kerja dan menyelesaikan masalah yang mereka hadapi.

Laravel 8 menyediakan pilihan berikut untuk Pengoptimuman Prestasi: Konfigurasi Cache: Gunakan Redis ke Pemacu Cache, Fasad Cache, Pandangan Cache, dan Page Page. Pengoptimuman pangkalan data: Menetapkan pengindeksan, gunakan skop pertanyaan, dan gunakan hubungan fasih. Pengoptimuman JavaScript dan CSS: Gunakan Kawalan Versi, Gabungan dan Secrink Aset, Gunakan CDN. Pengoptimuman kod: Gunakan pakej pemasangan komposer, gunakan fungsi pembantu Laravel, dan ikuti piawaian PSR. Pemantauan dan Analisis: Gunakan Pengakap Laravel, gunakan teleskop, memantau metrik aplikasi.

Langkah -langkah untuk belajar Laravel adalah: mempunyai pengetahuan asas PHP. Pasang rangka kerja Laravel. Ketahui mengenai seni bina Laravel. Ketahui sintaks asas: laluan, pengawal, pandangan, model. Bina rangka kerja amalan permohonan kecil untuk digunakan. Lihat dokumentasi rasmi untuk panduan terperinci. Sertai komuniti untuk bertukar pengalaman dan dapatkan bantuan. Tetap dikemas kini dan perhatikan ciri -ciri baru.

Laravel 6 memberi tumpuan kepada peningkatan kestabilan, prestasi dan pengalaman pemaju, termasuk: kemas kini penyelenggaraan dan keselamatan yang lebih lama sebagai pelepasan LTS. Mengoptimumkan komponen asas untuk meningkatkan prestasi, seperti meningkatkan caching penghalaan. Meningkatkan ciri-ciri sedia ada seperti meningkatkan UI Laravel untuk memudahkan bangunan front-end.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa