최근 몇 년 동안 인터넷의 급속한 발전으로 실시간 통신에 대한 요구가 점점 더 강력해졌고, WebSocket의 등장으로 실시간 데이터 전송을 위한 더욱 우아한 솔루션이 제공되었습니다. 웹 개발에서 PHP 언어는 주류 백엔드 언어 중 하나를 차지합니다. 그렇다면 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 달성하는 방법은 무엇입니까?
1. WebSocket이란
WebSocket은 HTTP/HTTPS 프로토콜의 포트 80 또는 443을 통해 통신하는 전이중 통신 프로토콜입니다. WebSocket이 연결을 설정하면 "요청-응답" 모드가 필요 없이 클라이언트와 서버 모두 서로 메시지를 보낼 수 있으므로 강력한 실시간 성능, 양방향 통신 및 낮은 장점이 있습니다. 오버헤드가 있으며 실시간 채팅, 온라인 게임 및 빠른 상호 작용이 필요한 기타 시나리오에 적합합니다.
2. PHP에서 WebSocket 사용
웹 개발에서 일반적으로 사용되는 PHP 프레임워크에는 Laravel, CodeIgniter 등이 있습니다. 다음은 Laravel을 예로 들어 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 달성하는 방법을 소개합니다.
Ratchet은 WebSocket 서버를 구현하는 데 사용할 수 있는 PHP용 WebSocket 라이브러리입니다. Laravel 프로젝트에서는 작곡가를 통해 설치할 수 있습니다. 명령은 다음과 같습니다.
$ composer require cboden/ratchet
Laravel 프로젝트의 app/Http/Controllers 디렉터리에 WebSocket 컨트롤러를 만들고 이름을 ChatController로 지정합니다. 이 컨트롤러는 Ratchet의 MessageComponentInterface 인터페이스를 상속하고 아래와 같이 onOpen, onMessage, onClose 및 onError 메서드를 다시 작성합니다.
<?php namespace AppHttpControllers; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class ChatController implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection! ({$conn->resourceId}) "; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from != $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } }
이 컨트롤러에서 $clients는 클라이언트 연결 개체의 컬렉션이고 onOpen 메서드는 다음을 나타냅니다. onMessage 메소드는 클라이언트 메시지가 수신될 때의 콜백 메소드를 나타냅니다. onError 메소드는 연결 오류가 발생할 때의 콜백 메소드를 나타냅니다.
Laravel 프로젝트의 Routes/web.php 라우팅 파일에 다음 코드를 추가하세요:
use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use AppHttpControllersChatController; Route::get('/chat', function () { $server = IoServer::factory( new HttpServer( new WsServer( new ChatController() ) ), 8080 ); $server->run(); });
이 코드는 WebSocket 서비스가 생성되어 로컬 8080 포트에서 수신 대기함을 나타냅니다. 서비스에 해당하는 컨트롤러는 ChatController입니다.
프런트 엔드 페이지에서는 아래와 같이 JavaScript 코드를 통해 WebSocket 서비스와 연결을 설정할 수 있습니다.
var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function (e) { console.log("Connection established!"); }; conn.onmessage = function (e) { console.log("Received: " + e.data); }; conn.onclose = function (e) { console.log("Connection closed!"); }; conn.onerror = function (e) { console.log("Error occurred: " + e.data); }; function sendMessage() { var input = document.getElementById("messageInput"); conn.send(input.value); input.value = ""; }
이 코드는 WebSocket과 서버 간의 연결이 설정되었음을 나타내며, 서버로부터 메시지가 수신되면 출력됩니다. 메시지를 보낼 때 콘솔로 이동하여 send 메소드를 호출하십시오.
Laravel 프로젝트를 시작한 후 브라우저에서 http://localhost/chat에 접속하여 WebSocket을 통해 서버와 연결하여 실시간 데이터 전송이 이루어지도록 합니다.
위는 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 구현하는 코드 예제입니다. 실제 필요에 따라 애플리케이션의 실시간 성능과 성능을 향상시킬 수 있습니다.
위 내용은 PHP 및 WebSocket: 실시간 데이터 전송 모범 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!