Dalam aplikasi web masa nyata, penyiaran acara ialah salah satu fungsi yang paling penting. Rangka kerja Laravel menyediakan fungsi penyiaran acara di luar kotak, dan penyiaran dan pemantauan acara boleh dilaksanakan dengan mudah melalui Penyiaran Laravel. Artikel ini akan memperkenalkan cara menggunakan Penyiaran Laravel untuk melaksanakan penyiaran acara.
1. Memahami penyiaran acara
Dalam aplikasi web, apabila sesuatu peristiwa berlaku, seperti pendaftaran pengguna yang berjaya, penerbitan artikel, dll., kami berharap pengguna lain dapat menerima maklumat yang berkaitan tepat pada masanya. Pada masa ini, jika anda menggunakan penyegaran halaman tradisional atau kaedah undian Ajax, ia akan menggunakan banyak lebar jalur dan sumber pelayan, dan tidak dapat memenuhi permintaan masa nyata. Penyiaran acara boleh menyelesaikan masalah ini.
Penyiaran acara adalah untuk memancarkan acara ke saluran atau kumpulan siaran tertentu, dan kemudian pengguna yang memantau saluran atau kumpulan siaran tertentu boleh menerima maklumat yang berkaitan dengan serta-merta. Melalui penyiaran acara, bilangan komunikasi antara pelayan dan pelanggan dapat dikurangkan dengan ketara, kependaman rangkaian dan penggunaan lebar jalur dapat dikurangkan, dan prestasi dan pengalaman pengguna aplikasi web dapat dipertingkatkan.
2. Pasang Laravel Broadcasting
Sebelum menggunakan Laravel Broadcasting, anda perlu memasang Laravel Echo dan pemacu siaran yang berkaitan. Laravel Echo ialah perpustakaan pelanggan Socket.io yang disertakan dengan rangka kerja Laravel, digunakan untuk komunikasi masa nyata dengan perkhidmatan penyiaran. Pemacu siaran menyediakan API untuk berinteraksi dengan perkhidmatan penyiaran yang berbeza, seperti Redis dan Pusher. Dalam artikel ini, kami akan menggunakan Pusher sebagai perkhidmatan penyiaran.
Pasang Laravel Echo dan Pusher SDK melalui npm:
npm install --save laravel-echo pusher-js
Buka fail config/app.php dan nyahkomen kod berikut:
AppProvidersBroadcastServiceProvider::class,
Kemudian, tambahkan konfigurasi berkaitan Pusher dalam fail .env:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret
Di mana, anda- app-id, your-app-key dan your-app-secret perlu diubah suai mengikut situasi sebenar.
3. Cipta acara dan saluran
Dalam Laravel, acara dilaksanakan melalui kelas Acara. Kita boleh membuat kelas Acara yang sepadan untuk setiap acara yang perlu disiarkan. Dalam artikel ini, kami mengambil pendaftaran pengguna yang berjaya sebagai contoh untuk mencipta acara UserRegistered. Mula-mula, laksanakan arahan berikut dalam terminal untuk mencipta kelas acara UserRegistered:
php artisan make:event UserRegistered
Seterusnya, buka fail app/Events/UserRegistered.php dan ubah suai kod kepada:
namespace AppEvents; use AppUser; use IlluminateQueueSerializesModels; use IlluminateFoundationEventsDispatchable; class UserRegistered { use Dispatchable, SerializesModels; public $user; /** * Create a new event instance. * * @param AppUser $user * @return void */ public function __construct(User $user) { $this->user = $user; } /** * Get the channels the event should broadcast on. * * @return IlluminateBroadcastingChannel|array */ public function broadcastOn() { return new Channel('user.'.$this->user->id); } }
Dalam kod di atas, Kami mencipta kelas acara UserRegistered dan menyuntik model Pengguna dalam pembina. Kemudian, dalam kaedah broadcastOn(), kami mentakrifkan saluran yang mana acara itu perlu disiarkan, di mana saluran peribadi ditentukan dalam bentuk 'pengguna.{user_id}'.
Seterusnya, kita perlu mencipta saluran Saluran Pengguna untuk memantau pengguna saluran 'pengguna.{user_id}'. Terdapat dua cara untuk membuat saluran Saluran Pengguna: pendaftaran manual dan penemuan automatik.
Kaedah pendaftaran manual:
Daftar saluran Saluran Pengguna dalam fail aplikasi/Pembekal/BroadcastServiceProvider.php:
use IlluminateSupportFacadesBroadcast; use AppBroadcastingUserChannel; Broadcast::channel('user.{userId}', UserChannel::class);
Kaedah penemuan automatik:
Dalam aplikasi/ Cipta fail UserChannel.php dalam direktori Penyiaran dan ubah suai kod kepada:
namespace AppBroadcasting; use AppUser; class UserChannel { /** * Create a new channel instance. * * @param AppUser $user * @return void */ public function __construct(User $user) { $this->user = $user; } /** * Authenticate the user's access to the channel. * * @return array|bool */ public function join(User $user, $userId) { return $user->id === (int) $userId; } }
Dalam kod di atas, kami mencipta kelas saluran UserChannel dan menyuntik model Pengguna dalam kaedah pembinaan. Kemudian, sahkan bahawa pengguna mempunyai akses kepada saluran melalui kaedah join().
4. Siarkan acara
Selepas mencipta acara dan saluran, kita boleh menggunakan fungsi broadcast() untuk menyiarkan acara ke saluran yang ditentukan. Dalam artikel ini, kami akan melaksanakan siaran acara UserRegistered selepas pendaftaran pengguna berjaya dalam kelas UserController:
namespace AppHttpControllers; use AppUser; use AppEventsUserRegistered; use IlluminateHttpRequest; class UserController extends Controller { /** * Register a new user. * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function register(Request $request) { $user = new User([ 'name' => $request->input('name'), 'email' => $request->input('email'), 'password' => bcrypt($request->input('password')), ]); $user->save(); event(new UserRegistered($user)); return response()->json([ 'message' => 'User registered successfully!', 'user' => $user, ]); } }
Dalam kod di atas, kami mula-mula mencipta pengguna dan melakukan operasi simpan. Kemudian, gunakan fungsi event() untuk menyiarkan acara UserRegistered untuk memberitahu pengguna lain bahawa pengguna baharu telah berjaya mendaftar.
5. Memantau acara
Selepas mencipta acara dan saluran, pengguna lain boleh menerima acara dengan memantau saluran yang sepadan. Seterusnya, kami akan mendengar acara UserRegistered melalui Laravel Echo.
Mula-mula, tambah kod berikut dalam fail resources/assets/js/bootstrap.js:
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, encrypted: true });
Dalam kod di atas, kami menggunakan Laravel Echo dan Pusher SDK untuk menyambung ke perkhidmatan siaran Pusher. PUSHER_APP_KEY dan PUSHER_APP_CLUSTER boleh ditetapkan dalam fail .env.
Buka fail resources/assets/js/app.js dan tambahkan kod berikut di dalamnya:
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, encrypted: true }); window.Echo.channel('user.' + userId) .listen('UserRegistered', (e) => { console.log(e); });
Dalam bahagian atas kod , kami mendengar saluran 'user.{user_id}' melalui kaedah window.Echo.channel() dan menentukan jenis acara sebagai 'UserRegistered'. Kod ini akan dilaksanakan selepas pengguna log masuk untuk memastikan setiap pengguna hanya mendengar saluran mereka sendiri.
6. Ujian
Daftar pengguna baharu dalam aplikasi, dan kemudian semak sama ada acara pendaftaran pengguna baharu diterima dalam konsol.
Melalui langkah di atas, kami telah menyelesaikan proses menggunakan Penyiaran Laravel untuk melaksanakan penyiaran acara. Penyiaran acara ialah salah satu fungsi penting aplikasi web masa nyata, yang boleh meningkatkan prestasi dan pengalaman pengguna aplikasi web dengan sangat baik.
Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana untuk menggunakan Penyiaran Laravel untuk melaksanakan penyiaran acara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!