PHP membangunkan pemberitahuan siaran dan langganan mesej untuk sistem sembang masa nyata
Dalam rangkaian sosial moden dan aplikasi pemesejan segera, sistem sembang masa nyata sudah pasti merupakan fungsi yang sangat penting. Pengguna boleh berkomunikasi dengan pengguna lain dalam masa nyata melalui sistem ini, menghantar mesej, menerima mesej dan melakukan pemberitahuan siaran dan langganan mesej yang sepadan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan pemberitahuan siaran dan fungsi langganan mesej sistem sembang masa nyata, dan menyediakan contoh kod yang sepadan.
Pertama sekali, kita perlu mempertimbangkan kaedah pelaksanaan yang boleh dilaksanakan untuk memastikan kesan komunikasi masa nyata. Kaedah pelaksanaan biasa adalah menggunakan protokol WebSocket, yang menyediakan saluran sambungan berterusan, yang membolehkan pelayan untuk secara aktif menolak mesej kepada klien, dan klien juga boleh menghantar mesej kepada pelayan. Berdasarkan protokol WebSocket, kita boleh menggunakan PHP untuk membangunkan sistem sembang masa nyata.
Seterusnya, mari belajar cara menggunakan PHP untuk melaksanakan fungsi pemberitahuan siaran. Pemberitahuan penyiaran merujuk kepada fungsi pelayan menyiarkan atau menolak mesej kepada semua pelanggan. Dalam PHP, kita boleh menggunakan perpustakaan Ratchet untuk mengendalikan protokol WebSocket. Ratchet ialah perpustakaan WebSocket yang dilaksanakan dalam PHP yang boleh berinteraksi dengan pelayan WebSocket dengan mudah.
Pertama, kita perlu memasang perpustakaan Ratchet, yang boleh dipasang menggunakan komposer, menggunakan arahan berikut:
composer require cboden/ratchet
Kemudian, kita boleh menulis skrip PHP untuk melaksanakan pelayan WebSocket dan mengendalikan fungsi pemberitahuan siaran. Contoh kod adalah seperti berikut:
require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage(); } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New client connected: " . $conn->resourceId . PHP_EOL; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { $client->send($msg); } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Client disconnected: " . $conn->resourceId . PHP_EOL; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: " . $e->getMessage() . PHP_EOL; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
Kod di atas mencipta kelas Sembang, melaksanakan antara muka MessageComponentInterface dan mengatasi kaedah yang berkaitan. Kaedah onOpen dipanggil apabila klien menyambung, kaedah onMessage dipanggil apabila mesej klien diterima, kaedah onClose dipanggil apabila klien memutuskan sambungan dan kaedah onError dipanggil apabila ralat berlaku.
Dalam kaedah onMessage, kami melaksanakan fungsi pemberitahuan siaran dengan melintasi semua pelanggan dan menghantar mesej yang diterima kepada setiap pelanggan.
Dengan menjalankan kod di atas, kami mencipta pelayan WebSocket yang boleh mendengar port 8080 dan menunggu sambungan. Apabila pelanggan baharu menyambung, pelayan akan mengeluarkan maklumat yang sepadan, dan apabila pelanggan memutuskan sambungan, ia juga akan mengeluarkan maklumat yang sepadan.
Seterusnya, mari belajar cara menggunakan PHP untuk melaksanakan fungsi langganan mesej. Langganan mesej merujuk kepada pelanggan yang melanggan saluran atau topik tertentu Apabila terdapat mesej baharu dalam saluran, pelanggan boleh menerima mesej dalam masa nyata. Untuk melaksanakan fungsi langganan mesej, kita boleh menggunakan Redis sebagai baris gilir mesej untuk menyimpan dan menolak mesej.
Pertama, kami perlu memasang dan mengkonfigurasi Redis Anda boleh merujuk kepada dokumentasi Redis rasmi untuk pemasangan dan konfigurasi.
Kemudian, kita perlu menggunakan perpustakaan sambungan Redis untuk melaksanakan fungsi langganan mesej Anda boleh menggunakan perpustakaan Predis, yang merupakan perpustakaan kelas PHP Redis yang popular. Gunakan arahan berikut untuk memasang perpustakaan Predis:
composer require predis/predis
Kami masih memerlukan pelayan WebSocket untuk mendengar sambungan pelanggan dan mengendalikan fungsi langganan mesej. Contoh kod adalah seperti berikut:
require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use PredisClient; class Chat implements MessageComponentInterface { protected $clients; protected $redis; public function __construct() { $this->clients = new SplObjectStorage(); $this->redis = new Client(); } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New client connected: " . $conn->resourceId . PHP_EOL; } public function onMessage(ConnectionInterface $from, $msg) { $this->redis->publish('chat', $msg); } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Client disconnected: " . $conn->resourceId . PHP_EOL; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: " . $e->getMessage() . PHP_EOL; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
Kod di atas adalah serupa dengan kod untuk pemberitahuan siaran Satu-satunya perbezaan ialah dalam kaedah onMessage, kami menggunakan kaedah penerbitan perpustakaan Predis untuk menolak mesej yang diterima ke 'sembang. ' saluran Redis. Dengan cara ini, kami melaksanakan fungsi langganan mesej.
Seterusnya, kami memerlukan pelanggan untuk menerima mesej ditolak. Halaman klien mudah boleh ditulis menggunakan JavaScript Contoh kod adalah seperti berikut:
<!DOCTYPE html> <html> <head> <title>Chat Client</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> var ws = new WebSocket("ws://localhost:8080"); ws.onmessage = function(event) { var message = event.data; $("#messages").append("<p>" + message + "</p>"); }; </script> </head> <body> <div id="messages"></div> </body> </html>
Kod di atas mencipta objek WebSocket, menyambung ke pelayan WebSocket kami, dan memaparkan mesej pada halaman apabila mesej diterima.
Dengan menjalankan kod di atas, kami telah melaksanakan sistem sembang masa nyata yang ringkas dengan pemberitahuan siaran dan fungsi langganan mesej. Pelayan boleh menolak mesej kepada semua pelanggan yang disambungkan dalam masa nyata, dan pelanggan boleh menerima mesej dalam masa nyata.
Ringkasnya, artikel ini memperkenalkan cara menggunakan PHP untuk membangunkan pemberitahuan siaran dan fungsi langganan mesej sistem sembang masa nyata. Dengan menggunakan perpustakaan Ratchet untuk melaksanakan pelayan WebSocket, kami boleh mengendalikan pemberitahuan siaran dan fungsi langganan mesej dengan mudah. Pada masa yang sama, dengan menggunakan Redis sebagai baris gilir mesej, kami boleh menyimpan dan menolak mesej. Kaedah ini boleh digunakan secara meluas dalam rangkaian sosial, pemesejan segera dan sistem lain untuk memberikan pengguna pengalaman komunikasi masa nyata yang lebih baik.
Atas ialah kandungan terperinci PHP membangunkan pemberitahuan siaran dan langganan mesej sistem sembang masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!