Pembangunan WebSockets dengan Laravel: Penyelesaian untuk komunikasi masa nyata
Petikan:
Apabila aplikasi web berkembang, komunikasi masa nyata menjadi semakin penting. Model respons permintaan HTTP tradisional mengehadkan sifat masa nyata aplikasi, jadi orang ramai mula mencari penyelesaian baharu. Teknologi WebSockets wujud, yang menyediakan cara untuk mewujudkan sambungan berterusan antara pelanggan dan pelayan, yang dapat merealisasikan fungsi komunikasi masa nyata. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Laravel untuk membangunkan aplikasi komunikasi masa nyata dengan mudah berdasarkan WebSockets.
Apakah itu WebSockets?
WebSocket ialah protokol komunikasi yang mewujudkan sambungan berterusan dua hala antara pelanggan dan pelayan. Tidak seperti model respons permintaan HTTP tradisional, WebSocket membenarkan pelayan dan klien bertukar-tukar data dalam masa nyata. Komunikasi WebSocket adalah dupleks penuh, yang bermaksud pelayan dan pelanggan boleh menghantar dan menerima data pada masa yang sama.
Kenapa pilih Laravel?
Laravel ialah rangka kerja pembangunan PHP yang popular yang menyediakan banyak ciri dan alatan berkuasa untuk menjadikan aplikasi web membina lebih mudah dan cekap. Rangka kerja Laravel menyediakan sokongan yang baik untuk komunikasi masa nyata, dan pakej sambungan Laravel Echo dan Laravel WebSockets menjadikannya mudah dan mudah untuk membangunkan aplikasi berasaskan WebSockets.
Mula menggunakan Laravel WebSockets:
Mula-mula, kita perlu memasang pakej sambungan Laravel WebSockets. Jalankan arahan berikut dalam terminal:
composer require beyondcode/laravel-websockets
Selepas pemasangan selesai, jalankan arahan berikut untuk menerbitkan fail konfigurasi:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"
Seterusnya, kita perlu menjana fail pemindahan pangkalan data berkaitan WebSockets:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations" php artisan migrate
Konfigurasikan Laravel WebSockets :
Buka fail konfigurasi Laravel "config/websockets.php", kita boleh menetapkan beberapa pilihan konfigurasi berkaitan WebSockets, seperti alamat mendengar dan port, pengesahan dan kebenaran, dsb.
Mencipta Acara:
Dalam Laravel, kami menggunakan acara untuk mengendalikan komunikasi masa nyata. Pertama, kita perlu membuat kelas acara. Jalankan arahan berikut untuk mencipta kelas bernama acara "NewMessage":
php artisan make:event NewMessage
Buka kelas acara yang baru dibuat "app/Events/NewMessage.php", kita boleh menentukan beberapa sifat dan kaedah untuk acara tersebut. Sebagai contoh, kita boleh menambah sifat yang dipanggil "mesej" pada acara, yang akan menyimpan kandungan mesej yang ingin kita siarkan.
public $message; public function __construct($message) { $this->message = $message; }
Langkah seterusnya ialah membuat penyiar acara. Jalankan arahan berikut untuk mencipta kelas penyiar bernama "NewMessageBroadcast":
php artisan make:channel NewMessageBroadcast
Buka kelas penyiar yang baru dibuat "app/Broadcasting/NewMessageBroadcast.php", kita perlu menentukan kaedah untuk penyiar mengendalikan penyiaran acara.
public function broadcastOn() { return new Channel('new-message'); } public function broadcastAs() { return 'message'; }
Mengkonfigurasi pemacu siaran:
Buka fail konfigurasi Laravel "config/broadcasting.php", kami boleh menetapkan jenis pemacu siaran kepada "penolak" dan menyediakan pilihan konfigurasi yang berkaitan.
'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => true, ], ],
Selepas konfigurasi selesai, kami boleh menggunakan Pusher sebagai pemacu siaran kami.
Mengendalikan Acara:
Dalam aplikasi kami, kami boleh mencetuskan acara kami dalam pengawal atau model dan menghantarnya menggunakan kelas siaran. Berikut adalah contoh:
use AppEventsNewMessage; use IlluminateHttpRequest; public function sendMessage(Request $request) { // 处理接收到的消息 $message = $request->input('message'); // 触发事件并广播 event(new NewMessage($message)); return response()->json(['message' => 'Message sent.']); }
Dalam kod di atas, kami mula-mula mendapat kandungan mesej yang diterima daripada permintaan. Kami kemudian mencetuskan acara tersuai kami "NewMessage" menggunakan "event" kelas acara Laravel. Akhir sekali, kami mengembalikan respons JSON yang menunjukkan bahawa mesej telah dihantar.
Dengar siaran:
Seterusnya, kita perlu mencipta skrip bahagian hadapan yang mendengar siaran. Dalam kod HTML anda, tambahkan kod berikut:
<script src="https://cdn.jsdelivr.net/npm/laravel-echo@^1.10.0/dist/echo.min.js"></script> <script src="/js/app.js"></script> <script> // 与WebSockets服务器建立连接 const echo = new Echo({ broadcaster: 'pusher', key: 'your-pusher-key', cluster: 'your-pusher-cluster', encrypted: true, }); // 监听来自"new-message"频道的消息 echo.channel('new-message') .listen('.message', (message) => { console.log(message); }); </script>
Dalam kod di atas, kami mula-mula membawa masuk Laravel Echo dan fail JavaScript bahagian hadapan kami. Kami kemudiannya memulakan kejadian Echo menggunakan kunci Penolak dan maklumat kluster yang dikonfigurasikan sebelum ini. Akhir sekali, kami mendengar saluran bernama "new-message" menggunakan kaedah "echo.channel()" dan mengendalikan mesej daripada saluran tersebut menggunakan kaedah ".listen()".
Kesimpulan:
Menggunakan Laravel untuk pembangunan WebSockets ialah penyelesaian yang ideal untuk komunikasi masa nyata. Pakej sambungan Laravel Echo dan Laravel WebSockets yang disediakan oleh Laravel menjadikan membina aplikasi berasaskan WebSockets mudah dan cekap. Dengan mengikuti langkah dan kod sampel dalam artikel ini, anda akan dapat membina aplikasi komunikasi masa nyata yang berkuasa dengan cepat. Saya doakan anda berjaya dalam proses pembangunan anda!
Atas ialah kandungan terperinci Pembangunan WebSockets dengan Laravel: penyelesaian untuk komunikasi masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!