


Artikel yang menerangkan secara terperinci cara membuat aliran acara mudah dalam Laravel dengan cepat
Artikel ini membawakan anda pengetahuan yang berkaitan tentang aliran acara Laravel terutamanya tentang aliran acara dan cara membuat aliran acara mudah dalam Laravel.
Pengenalan
Penstriman acara memberi anda cara untuk menghantar acara kepada pelanggan tanpa memuatkan semula halaman. Ini berguna untuk mengemas kini antara muka pengguna apabila perubahan langsung dibuat pada pangkalan data.
Tidak seperti tinjauan panjang tradisional menggunakan permintaan AJAX, di mana berbilang permintaan dihantar ke pelayan dan sambungan baharu diwujudkan setiap kali, strim acara dihantar kepada pelanggan dalam masa nyata dalam satu permintaan .
Dalam artikel ini, saya akan menunjukkan kepada anda cara membuat strim acara mudah dalam Laravel.
Prasyarat
Sebelum anda bermula, anda perlu memasang Laravel pada mesin anda.
Saya akan menggunakan Titisan Ubuntu DigitalOcean dalam demo ini. Jika anda mahu, anda boleh menggunakan kod ahli gabungan saya untuk mendapatkan Kredit DigitalOcean $100 percuma untuk melancarkan pelayan anda sendiri!
Jika anda belum melakukannya, anda boleh mengikuti langkah-langkah dalam tutorial ini:
Atau anda boleh memasangnya menggunakan skrip hebat ini:
Buat Pengawal
Mari mulakan dengan mencipta pengawal yang mengendalikan aliran acara.
Gunakan arahan berikut:
php artisan make:controller EventStreamController
Ini akan mencipta pengawal baharu dalam direktori AppHttpControllers.
Tambah Kaedah Aliran Peristiwa
Setelah kami mencipta pengawal kami, kami perlu menambah kaedah stream
padanya. Kaedah ini akan digunakan untuk menghantar aliran acara.
Buka fail EventStreamController.php
dan tambah kod berikut:
<?php namespace App\Http\Controllers;use Carbon\Carbon;use App\Models\Trade;class StreamsController extends Controller{ /** * 事件流代码 * * @return \Illuminate\Http\Response */ public function stream(){ return response()->stream(function () { while (true) { echo "event: ping\n"; $curDate = date(DATE_ISO8601); echo 'data: {"time": "' . $curDate . '"}'; echo "\n\n"; $trades = Trade::latest()->get(); echo 'data: {"total_trades":' . $trades->count() . '}' . "\n\n"; $latestTrades = Trade::with('user', 'stock')->latest()->first(); if ($latestTrades) { echo 'data: {"latest_trade_user":"' . $latestTrades->user->name . '", "latest_trade_stock":"' . $latestTrades->stock->symbol . '", "latest_trade_volume":"' . $latestTrades->volume . '", "latest_trade_price":"' . $latestTrades->stock->price . '", "latest_trade_type":"' . $latestTrades->type . '"}' . "\n\n"; } ob_flush(); flush(); // 如果客户端中止连接,则中断循环(关闭页面) if (connection_aborted()) {break;} usleep(50000); // 50ms } }, 200, [ 'Cache-Control' => 'no-cache', 'Content-Type' => 'text/event-stream', ]); }}
Perkara utama yang perlu diperhatikan di sini ialah:
- Kami menggunakan
response()->stream()
kaedah untuk mencipta aliran acara. - Kemudian kami mempunyai gelung tak terhingga yang menghantar aliran acara setiap 50ms.
- Kami menggunakan
ob_flush()
danflush()
untuk menghantar aliran acara jika pelanggan membatalkan sambungan. - Kami menggunakan
sleep()
untuk menunggu 50ms sebelum menghantar acara seterusnya. - Kami menggunakan
connection_aborted()
untuk memecahkan gelung jika pelanggan membatalkan sambungan. - Kami menggunakan kelas
CarbonCarbon
untuk mendapatkan tarikh semasa. - Kami menggunakan model
AppModelsTrade
untuk mendapatkan transaksi terkini. Ini adalah untuk demonstrasi sahaja, anda boleh menggunakan mana-mana model yang anda mahu. - Tetapkan pengepala
Content-Type
kepadatext/event-stream
untuk memberitahu penyemak imbas bahawa respons adalah strim acara.
Dayakan penimbalan output
Untuk membolehkan kod di atas berfungsi dengan betul, kami perlu mendayakan penimbalan output dalam fail PHP.ini anda. Ini dilakukan dengan menambah baris berikut pada fail php.ini
:
output_buffering = On
Selepas membuat perubahan ini, anda mungkin perlu memuatkan semula perkhidmatan PHP-FPM. Atau jika anda menggunakan Apache, anda boleh memulakan semula Apache.
Tambah laluan
Apabila laluan /stream
diminta, kami mahu memanggil kaedah ``strim`. Laluan
akan ditambahkan pada fail routes/web.php
seperti berikut:
use App\Http\Controllers\StreamsController;Route::get('/stream', [StreamsController::class, 'stream']);
Menggunakan aliran acara dari bahagian hadapan
Anda boleh menggunakan Vue. js dan rangka kerja bahagian hadapan yang lain untuk mengendalikan aliran acara. Tetapi untuk demo ini, saya akan menggunakan Javascript tulen.
Coretan JavaScript yang ditambahkan pada templat bilah kelihatan seperti ini:
const eventSource = new EventSource('/stream');eventSource.onmessage = function(event) { const data = JSON.parse(event.data); if (data.time) { document.getElementById('time').innerHTML = data.time; } const newElement = document.createElement("li"); const eventList = document.getElementById("list"); newElement.textContent = "message: " + event.data; eventList.appendChild(newElement);}
Untuk melihat tindakan ini, anda boleh mencuba demo berikut! [Cadangan berkaitan: tutorial video laravel]
Projek demo
Jika anda ingin memahami cara penstriman acara berfungsi, anda boleh menyemak projek demo yang saya buat:
Laravel EventStream: Live Stock Trading Dashboard menggunakan Laravel and Materialize
Projek demo bukan sahaja menunjukkan aliran acara tetapi juga mempunyai papan pemuka bahagian hadapan yang ringkas dan menggunakan Materialize Sebagai pangkalan data penstriman.
SSE lwn WebSockets
Strim acara hebat dan mudah digunakan, tetapi ia juga mempunyai beberapa kelebihan dan kekurangan berbanding protokol penstriman lain seperti WebSockets.
Sebagai contoh, SSE adalah sehala, yang bermaksud bahawa setelah sambungan diwujudkan, pelayan hanya boleh menghantar data kepada klien, dan klien tidak boleh menghantar data kembali ke pelayan.
Tidak seperti pengundian panjang, dengan WebSockets anda hanya mempunyai satu sambungan ke pelayan, serupa dengan SSE (Peristiwa Dihantar Pelayan). Sambungan adalah dupleks, yang bermaksud anda boleh menghantar dan menerima data daripada pelayan.
Jika anda ingin mengetahui lebih lanjut tentang perbezaan antara SSE dan WebSockets, lihat video hebat ini oleh Martin Chaov: Pautan
Kesimpulan
Berkaitan Untuk mendapatkan maklumat lanjut tentang penstriman acara, lihat dokumentasi ini daripada Mozilla di sini:
Di sana, Anda akan dapatkan penjelasan yang lebih mendalam tentang penstriman acara dan cara ia berfungsi.
Untuk maklumat lanjut tentang Materialize, tonton video ini di sini: LINK
Semoga anda menikmati tutorial ini!
Alamat asal: https://devdojo.com/bobbyiliev/how-to-cr...
Alamat terjemahan: https: //www.php.cn/link/09d45b92ec72b3c16ac64bbe4b97f539
Atas ialah kandungan terperinci Artikel yang menerangkan secara terperinci cara membuat aliran acara mudah dalam Laravel dengan cepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PHP dan Flutter ialah teknologi popular untuk pembangunan mudah alih. Flutter cemerlang dalam keupayaan merentas platform, prestasi dan antara muka pengguna, dan sesuai untuk aplikasi yang memerlukan prestasi tinggi, merentas platform dan UI tersuai. PHP sesuai untuk aplikasi sebelah pelayan dengan prestasi yang lebih rendah dan bukan merentas platform.

Operasi pangkalan data dalam PHP dipermudahkan menggunakan ORM, yang memetakan objek ke dalam pangkalan data hubungan. EloquentORM dalam Laravel membolehkan anda berinteraksi dengan pangkalan data menggunakan sintaks berorientasikan objek Anda boleh menggunakan ORM dengan mentakrifkan kelas model, menggunakan kaedah Eloquent atau membina sistem blog dalam amalan.

Laravel - Perintah Artisan - Laravel 5.7 hadir dengan cara baharu untuk merawat dan menguji arahan baharu. Ia termasuk ciri baharu untuk menguji arahan artisan dan demonstrasi disebut di bawah?

Analisis alat ujian unit PHP: PHPUnit: sesuai untuk projek besar, menyediakan fungsi yang komprehensif dan mudah dipasang, tetapi mungkin bertele-tele dan perlahan. PHPUnitWrapper: sesuai untuk projek kecil, mudah digunakan, dioptimumkan untuk Lumen/Laravel, tetapi mempunyai fungsi terhad, tidak menyediakan analisis liputan kod dan mempunyai sokongan komuniti terhad.

Versi terkini Laravel 9 dan CodeIgniter 4 menyediakan ciri dan penambahbaikan yang dikemas kini. Laravel9 menggunakan seni bina MVC dan menyediakan fungsi seperti migrasi pangkalan data, pengesahan dan enjin templat. CodeIgniter4 menggunakan seni bina HMVC untuk menyediakan penghalaan, ORM dan caching. Dari segi prestasi, corak reka bentuk berasaskan pembekal perkhidmatan Laravel9 dan rangka kerja ringan CodeIgniter4 memberikannya prestasi cemerlang. Dalam aplikasi praktikal, Laravel9 sesuai untuk projek kompleks yang memerlukan fleksibiliti dan fungsi berkuasa, manakala CodeIgniter4 sesuai untuk pembangunan pesat dan aplikasi kecil.

Bandingkan keupayaan pemprosesan data Laravel dan CodeIgniter: ORM: Laravel menggunakan EloquentORM, yang menyediakan pemetaan hubungan kelas-objek, manakala CodeIgniter menggunakan ActiveRecord untuk mewakili model pangkalan data sebagai subkelas kelas PHP. Pembina pertanyaan: Laravel mempunyai API pertanyaan berantai yang fleksibel, manakala pembina pertanyaan CodeIgniter lebih ringkas dan berasaskan tatasusunan. Pengesahan data: Laravel menyediakan kelas Pengesah yang menyokong peraturan pengesahan tersuai, manakala CodeIgniter mempunyai kurang fungsi pengesahan terbina dalam dan memerlukan pengekodan manual peraturan tersuai. Kes praktikal: Contoh pendaftaran pengguna menunjukkan Lar

Unit PHP dan Panduan Pengujian Penyepaduan Pengujian Unit: Fokus pada satu unit kod atau fungsi dan gunakan PHPUnit untuk mencipta kelas kes ujian untuk pengesahan. Ujian integrasi: Beri perhatian kepada cara berbilang unit kod berfungsi bersama, dan gunakan kaedah setUp() dan tearDown() PHPUnit untuk menyediakan dan membersihkan persekitaran ujian. Kes praktikal: Gunakan PHPUnit untuk melaksanakan ujian unit dan penyepaduan dalam aplikasi Laravel, termasuk mencipta pangkalan data, memulakan pelayan dan menulis kod ujian.

Apabila memilih rangka kerja untuk projek besar, Laravel dan CodeIgniter masing-masing mempunyai kelebihan mereka sendiri. Laravel direka untuk aplikasi peringkat perusahaan, menawarkan reka bentuk modular, suntikan pergantungan dan set ciri yang berkuasa. CodeIgniter ialah rangka kerja ringan yang lebih sesuai untuk projek kecil hingga sederhana, menekankan kelajuan dan kemudahan penggunaan. Untuk projek besar dengan keperluan yang kompleks dan bilangan pengguna yang ramai, kuasa dan kebolehskalaan Laravel adalah lebih sesuai. Untuk projek atau situasi mudah dengan sumber terhad, keupayaan pembangunan CodeIgniter yang ringan dan pantas adalah lebih ideal.
