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 為客戶端和伺服器之間的即時、全雙工通訊提供了強大的解決方案,非常適合聊天系統、即時通知和其他即時應用程式。透過將 PHP 與 Ratchet 等程式庫結合使用,您可以輕鬆設定 WebSocket 伺服器並將其整合到您的應用程式中,以提高使用者參與度和回應能力。
以上是了解 PHP 中的 WebSocket的詳細內容。更多資訊請關注PHP中文網其他相關文章!