Jadual Kandungan
Pengenalan
Prasyarat
Buat Pengawal
Tambah Kaedah Aliran Peristiwa
Dayakan penimbalan output
Tambah laluan
Menggunakan aliran acara dari bahagian hadapan
Projek demo
SSE lwn WebSockets
Kesimpulan
Rumah rangka kerja php Laravel Artikel yang menerangkan secara terperinci cara membuat aliran acara mudah dalam Laravel dengan cepat

Artikel yang menerangkan secara terperinci cara membuat aliran acara mudah dalam Laravel dengan cepat

Jan 04, 2023 pm 04:07 PM
laravel

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 .

Artikel yang menerangkan secara terperinci cara membuat aliran acara mudah dalam Laravel dengan cepat

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
Salin selepas log masuk

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',
        ]);
    }}
Salin selepas log masuk

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() dan flush() 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 kepada text/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
Salin selepas log masuk

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']);
Salin selepas log masuk

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);}
Salin selepas log masuk

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.

Laravel EventStream

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP vs. Flutter: Pilihan terbaik untuk pembangunan mudah alih PHP vs. Flutter: Pilihan terbaik untuk pembangunan mudah alih May 06, 2024 pm 10:45 PM

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.

Bagaimana untuk menggunakan pemetaan hubungan objek (ORM) dalam PHP untuk memudahkan operasi pangkalan data? Bagaimana untuk menggunakan pemetaan hubungan objek (ORM) dalam PHP untuk memudahkan operasi pangkalan data? May 07, 2024 am 08:39 AM

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 - Perintah Artisan Aug 27, 2024 am 10:51 AM

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 kelebihan dan kekurangan alat ujian unit PHP Analisis kelebihan dan kekurangan alat ujian unit PHP May 06, 2024 pm 10:51 PM

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.

Perbandingan versi terkini Laravel dan CodeIgniter Perbandingan versi terkini Laravel dan CodeIgniter Jun 05, 2024 pm 05:29 PM

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.

Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Bagaimanakah keupayaan pemprosesan data dalam Laravel dan CodeIgniter dibandingkan? Jun 01, 2024 pm 01:34 PM

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

Ujian unit kod PHP dan ujian integrasi Ujian unit kod PHP dan ujian integrasi May 07, 2024 am 08:00 AM

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.

Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek besar? Laravel vs CodeIgniter: Rangka kerja manakah yang lebih baik untuk projek besar? Jun 04, 2024 am 09:09 AM

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.

See all articles