웹 애플리케이션이 더욱 복잡해짐에 따라 실시간 통신 및 데이터 푸시가 점점 더 보편화되고 있습니다. 이것이 WebSocket이 들어오는 곳입니다. WebSocket은 서버와 클라이언트가 실시간 통신 및 데이터 푸시를 위한 양방향 통신을 위한 지속적인 연결을 설정할 수 있도록 하는 프로토콜입니다. 이번 글에서는 PHP에서 WebSocket을 사용하는 방법에 대해 설명하겠습니다.
WebSocket은 연결이 설정된 후 서버와 클라이언트가 실시간으로 통신할 수 있게 해주는 전이중 TCP 기반 프로토콜입니다. HTTP 요청-응답 모델과 달리 WebSocket 연결은 연결이 설정된 후에도 항상 열려 있으므로 여러 HTTP 핸드셰이크가 필요하지 않습니다.
WebSocket은 텍스트, 바이너리, JSON, XML 등을 포함한 다양한 데이터 유형을 지원하는 바이너리 프로토콜입니다. 따라서 WebSocket은 실시간 통신 및 데이터 푸시에 이상적입니다.
PHP에서 WebSocket을 사용하려면 라이브러리를 사용해야 합니다. 이번 글에서는 Ratchet 라이브러리를 사용하겠습니다. Ratchet을 설치하려면 Composer를 통해 다음 명령을 실행할 수 있습니다.
composer require cboden/ratchet
설치가 완료된 후 WebSocket 애플리케이션을 구현하는 코드 작성을 시작할 수 있습니다.
다음은 클라이언트로부터 메시지를 받고 연결된 모든 클라이언트에 메시지를 보내는 WebSocket 서비스를 구현하는 간단한 예입니다.
use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use RatchetMessageComponentInterface; use RatchetConnectionInterface; 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} "; } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Client disconnected: {$conn->resourceId} "; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onError(ConnectionInterface $conn, Exception $e) { echo "Error: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); echo "Server started "; $server->run();
위의 예에서는 다음을 정의합니다. MessageComponentInterface 인터페이스를 구현하는 Chat이라는 클래스입니다. 이 클래스에는 클라이언트의 연결, 연결 해제 및 메시지를 처리하기 위한 특수 메서드가 포함되어 있습니다.
onOpen(ConnectionInterface $conn): 이 메서드는 클라이언트가 서버에 연결할 때 호출됩니다. 여기서는 클라이언트 개체에 대한 연결을 추가합니다.
onClose(ConnectionInterface $conn): 이 메서드는 클라이언트가 연결을 닫을 때 호출됩니다. 여기서는 연결 클라이언트 개체를 삭제합니다.
onMessage(ConnectionInterface $from, $msg): 이 메서드는 클라이언트가 메시지를 보낼 때 호출됩니다. 여기에서는 연결된 다른 클라이언트에게 메시지를 보냅니다.
onError(ConnectionInterface $conn, Exception $e): 이 메서드는 오류가 발생할 때 호출됩니다. 여기서 연결을 닫습니다.
위의 예에서는 IoServer 클래스를 통해 HTTP 서버도 생성하고, 포트 8080에서 수신 대기하고, HttpServer를 통해 WebSocket 서버에 요청을 전달하고, WsServer를 통해 Chat 클래스에 요청을 전달했습니다.
WebSocket 서버에 연결하려면 클라이언트를 구현해야 합니다. 다음은 서버에 연결하고 서버에 메시지를 보내는 간단한 예입니다.
<!DOCTYPE html> <html> <head> <title>WebSocket client</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="text" id="message" placeholder="Enter your message"> <button id="send">Send</button> <ul id="messages"></ul> <script> $(function () { var socket = new WebSocket('ws://localhost:8080'); socket.onopen = function() { console.log('Connection opened'); }; socket.onclose = function() { console.log('Connection closed'); }; socket.onmessage = function(event) { var data = JSON.parse(event.data); $('#messages').append($('<li>').text(data.message)); }; $('#send').click(function() { var message = $('#message').val(); socket.send(JSON.stringify({message: message})); }); }); </script> </body> </html>
위 예에서는 WebSocket 개체를 사용하여 새 WebSocket 연결을 만듭니다. 연결이 열리거나 닫히면 onopen 및 onclose 이벤트가 트리거됩니다. WebSocket이 서버로부터 메시지를 수신하면 onmessage 이벤트가 트리거됩니다. 보내기 버튼의 클릭 이벤트를 수신하기 위해 jQuery 라이브러리를 사용했고, 클릭 시 텍스트 입력 상자의 값을 서버에 메시지로 보냈습니다.
WebSocket은 서버와 클라이언트가 실시간 통신 및 데이터 푸시를 위한 양방향 통신을 위한 지속적인 연결을 설정할 수 있도록 하는 강력한 프로토콜입니다. 이 기사에서는 Ratchet 라이브러리를 사용하여 간단한 WebSocket 서버를 구현했습니다. 또한 간단한 HTML 페이지를 사용하여 서버에 연결하고 메시지를 보내는 방법을 보여주었습니다. 실시간 대화형 웹 애플리케이션을 구축하려는 경우 WebSocket은 절대적으로 없어서는 안 될 부분입니다.
위 내용은 PHP에서 WebSocket을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!