WebSocket 通过单个 TCP 连接提供实时、全双工通信通道。与 HTTP 不同,HTTP 中客户端向服务器发送请求并等待响应,WebSocket 允许客户端和服务器之间进行连续通信,而无需多次请求。这非常适合需要实时更新的应用程序,例如聊天应用程序、实时通知和在线游戏。
在本指南中,我们将探索 WebSocket、它们的工作原理以及如何在 PHP 中实现它们。
WebSockets 支持 Web 浏览器(或任何其他客户端)和服务器之间的交互式通信。以下是 WebSocket 的关键方面:
要在 PHP 中实现 WebSocket,您可以使用诸如 Ratchet 之类的库,这是一个专门为使用 WebSocket 进行实时双向通信而设计的 PHP 库。
首先,您需要安装 Ratchet 库。假设你已经安装了 Composer,你可以运行以下命令:
composer require cboden/ratchet
让我们创建一个简单的 WebSocket 服务器来处理连接和消息。
<?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(); } }
此类实现 Ratchet 的 MessageComponentInterface,它定义了处理新连接、传入消息、关闭连接和错误的方法。
创建一个新的 PHP 脚本来启动 WebSocket 服务器,例如 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();
您可以通过运行以下脚本来启动服务器:
php start_server.php
服务器现在将在 ws://localhost:8080 上运行。
现在,让我们使用 jQuery 和 JavaScript 创建一个 HTML 文件来连接到 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>
这个简单的界面允许您输入消息并将其发送到 WebSocket 服务器。所有连接的客户端都会收到该消息并显示它。
当您从一个客户端发送消息时,它将显示在所有连接的客户端的浏览器中。
WebSockets bieten eine leistungsstarke Lösung für die Echtzeit-Vollduplex-Kommunikation zwischen Client und Server, ideal für Chat-Systeme, Live-Benachrichtigungen und andere Echtzeitanwendungen. Durch die Verwendung von PHP mit Bibliotheken wie Ratchet können Sie ganz einfach einen WebSocket-Server einrichten und ihn für eine bessere Benutzereinbindung und Reaktionsfähigkeit in Ihre Anwendungen integrieren.
Das obige ist der detaillierte Inhalt vonWebSockets in PHP verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!