


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



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?

Laravel - Penyesuaian Penomboran - Laravel termasuk ciri penomboran yang membantu pengguna atau pembangun menyertakan ciri penomboran. Paginator Laravel disepadukan dengan pembina pertanyaan dan ORM Fasih. Kaedah penomboran automatik

Kaedah untuk mendapatkan kod kembali apabila menghantar e -mel Laravel gagal. Apabila menggunakan Laravel untuk membangunkan aplikasi, anda sering menghadapi situasi di mana anda perlu menghantar kod pengesahan. Dan pada hakikatnya ...

Tugas Jadual Laravel menjalankan penyelesaian masalah yang tidak responsif semasa menggunakan penjadualan tugas jadual Laravel, banyak pemaju akan menghadapi masalah ini: Jadual: Jalankan ...

Kaedah mengendalikan kegagalan e -mel Laravel untuk menghantar kod pengesahan adalah menggunakan Laravel ...

Cara melaksanakan fungsi jadual klik tersuai untuk menambah data dalam dcatadmin (laravel-admin) semasa menggunakan dcat ...

Laravel - Dump Server - Laravel dump server datang dengan versi Laravel 5.7. Versi sebelumnya tidak termasuk pelayan dump. Pelayan dump akan menjadi kebergantungan pembangunan dalam fail komposer laravel/laravel.

Kesan perkongsian sambungan Redis dalam rangka kerja Laravel dan pilih kaedah apabila menggunakan Rangka Kerja Laravel dan Redis, pemaju mungkin menghadapi masalah: melalui konfigurasi ...
