WebSockets menyediakan saluran komunikasi dupleks penuh masa nyata melalui satu sambungan TCP. Tidak seperti HTTP, di mana pelanggan menghantar permintaan kepada pelayan dan menunggu respons, WebSockets membenarkan komunikasi berterusan antara klien dan pelayan tanpa memerlukan berbilang permintaan. Ini sesuai untuk aplikasi yang memerlukan kemas kini masa nyata, seperti aplikasi sembang, pemberitahuan langsung dan permainan dalam talian.
Dalam panduan ini, kami akan meneroka WebSockets, cara ia berfungsi dan cara melaksanakannya dalam PHP.
WebSockets membolehkan komunikasi interaktif antara penyemak imbas web (atau mana-mana pelanggan lain) dan pelayan. Berikut ialah aspek utama WebSockets:
Untuk melaksanakan WebSockets dalam PHP, anda boleh menggunakan pustaka seperti Ratchet, pustaka PHP yang direka khusus untuk komunikasi dua hala masa nyata menggunakan WebSockets.
Pertama, anda perlu memasang perpustakaan Ratchet. Dengan mengandaikan anda telah memasang Komposer, anda boleh menjalankan arahan berikut:
composer require cboden/ratchet
Mari kita buat pelayan WebSocket mudah yang akan mengendalikan sambungan dan mesej.
<?php use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; class WebSocketServer implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; } // Called when a new client connects public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection: ({$conn->resourceId})\n"; } // Called when a client sends a message public function onMessage(ConnectionInterface $from, $msg) { echo "New message: $msg\n"; foreach ($this->clients as $client) { if ($from !== $client) { // Send the message to everyone except the sender $client->send($msg); } } } // Called when a connection is closed public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: ({$conn->resourceId})\n"; } // Called if an error occurs public function onError(ConnectionInterface $conn, \Exception $e) { echo "Error: {$e->getMessage()}\n"; $conn->close(); } }
Kelas ini melaksanakan Ratchet's MessageComponentInterface, yang mentakrifkan kaedah untuk mengendalikan sambungan baharu, mesej masuk, sambungan tertutup dan ralat.
Buat skrip PHP baharu untuk memulakan pelayan WebSocket, contohnya, start_server.php.
<?php require __DIR__ . '/vendor/autoload.php'; use Ratchet\Http\HttpServer; use Ratchet\Server\IoServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new WebSocketServer() ) ), 8080 // Port number for the WebSocket server ); $server->run();
Anda boleh memulakan pelayan dengan menjalankan skrip ini:
php start_server.php
Pelayan kini akan berjalan pada ws://localhost:8080.
Sekarang, mari buat fail HTML dengan jQuery dan JavaScript untuk menyambung ke pelayan WebSocket.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>WebSocket Chat</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <h2>WebSocket Chat</h2> <input type="text" id="message" placeholder="Enter your message"> <button id="send">Send</button> <div id="chat"></div> <script> $(document).ready(function() { var ws = new WebSocket('ws://localhost:8080'); // When receiving a message from the server ws.onmessage = function(event) { $('#chat').append('<p>' + event.data + '</p>'); }; // Sending a message to the server $('#send').click(function() { var msg = $('#message').val(); ws.send(msg); $('#message').val(''); }); }); </script> </body> </html>
Antara muka ringkas ini membolehkan anda memasukkan mesej dan menghantarnya ke pelayan WebSocket. Semua pelanggan yang disambungkan akan menerima mesej dan memaparkannya.
Apabila anda menghantar mesej daripada satu pelanggan, ia akan dipaparkan dalam semua penyemak imbas pelanggan yang disambungkan.
WebSockets 为客户端和服务器之间的实时、全双工通信提供了强大的解决方案,非常适合聊天系统、实时通知和其他实时应用程序。通过将 PHP 与 Ratchet 等库结合使用,您可以轻松设置 WebSocket 服务器并将其集成到您的应用程序中,以提高用户参与度和响应能力。
Atas ialah kandungan terperinci Memahami WebSockets dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!