네트워크 기술의 발전으로 WebSocket(웹 소켓)은 브라우저와 서버 사이에 실시간 통신 채널을 구축하여 연결을 유지할 수 있는 인기 있는 프로토콜이 되었습니다. 이 프로토콜은 웹 애플리케이션에서 실시간 통신 기능을 활성화하는 데 큰 역할을 합니다.
PHP 개발 분야에서는 WebSocket의 사용이 점점 더 늘어나고 있습니다. 이번 글에서는 PHP에서 WebSocket을 사용하는 방법을 소개하겠습니다.
먼저 PHP에서 WebSocket 기능을 쉽게 구현하려면 PHP WebSocket 라이브러리를 사용해야 합니다. 현재 가장 널리 사용되는 PHP WebSocket 라이브러리는 Ratchet 및 PHP WebSocket입니다.
여기에서는 ReactPHP 라이브러리를 사용하여 비동기 이벤트 중심 PHP를 구현하고 다른 프레임워크와 완벽하게 호환되며 유연성과 확장성을 갖춘 Ratchet을 사용합니다.
Ratchet은 Composer를 사용하여 설치 및 관리되기 때문에 시작하기 전에 Composer를 먼저 설치해야 합니다.
Composer는 여기에서 다운로드할 수 있습니다: https://getcomposer.org/
Composer를 사용하여 Ratchet 설치:
composer require cboden/ratchet
이 예에서는 다음을 사용하여 간단한 채팅방을 구현하겠습니다. Ratchet은 WebSocket 서버를 작성합니다. 구현 단계는 다음과 같습니다.
a. WebSocket 서버 생성
use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
여기서 Ratchet 라이브러리가 먼저 소개된 다음 HttpServer 및 WsServer를 사용하여 각각 HTTP 및 WebSocket 프로토콜 지원을 지정하고 전달하는 WebSocket 서버가 생성됩니다. Chat 클래스에 추가합니다(Chat 클래스가 클라이언트 연결 요청을 처리하는 데 사용된다는 점은 나중에 설명하겠습니다).
여기서는 포트 8080을 수신합니다.
b. 채팅방 만들기
use RatchetMessageComponentInterface; use RatchetConnectionInterface; class Chat implements MessageComponentInterface { public $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, Exception $e) { $conn->close(); } }
여기에서는 MessageComponentInterface 인터페이스를 구현하는 Chat이라는 클래스를 만듭니다. 이 인터페이스는 다양한 연결 상태에서 WebSocket 서버가 수행하는 작업을 정의합니다.
구체적으로는 연결된 클라이언트를 저장하는 SplObjectStorage 개체인 생성자에 클라이언트 변수를 선언했습니다. onOpen 메서드에서는 연결 개체가 이 변수에 할당됩니다.
클라이언트로부터 메시지가 있으면 모든 연결에 대해 수신되는 onMessage 메소드를 통해 메시지를 브로드캐스트합니다.
onClose 메서드에서는 연결 개체가 변수에서 제거됩니다. 오류가 발생하고 클라이언트 연결을 처리할 수 없으면 onError 함수가 호출됩니다.
다음으로 WebSocket 서버에 연결하려면 클라이언트 측 JavaScript 코드가 필요합니다.
let socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('WebSocket连接已建立'); }; socket.onmessage = function(event) { console.log('收到消息:' + event.data); };
여기에서는 WebSocket 개체의 API를 직접 사용하여 서버에 연결하고 메시지를 보내고 받습니다.
위 단계를 완료하면 WebSocket 서버가 성공적으로 작성된 것입니다. 이제 명령줄을 통해 서버를 실행하세요.
php server.php
명령줄에서 서버를 시작하면 다음과 비슷한 결과가 표시됩니다.
2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080 2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616
는 WebSocket 서비스가 성공적으로 시작되었고 포트 8080에서 수신 대기하고 있음을 의미합니다.
마지막으로 브라우저를 열고 http://localhost/chat.html을 방문하면 브라우저 연결을 확인하고 WebSocket 서버에 참여할 수 있습니다.
let socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('WebSocket连接已建立'); socket.send('欢迎加入聊天室'); }; socket.onmessage = function(event) { console.log('收到消息:' + event.data); };
여기서는 서버에 메시지를 보내고 서버 메시지가 수신되면 콘솔에 로그합니다.
테스트 웹페이지를 실행하면 콘솔에 다음과 유사한 출력이 표시됩니다.
WebSocket已连接 WebSocket收到消息:欢迎加入聊天室
이제 PHP에서 WebSocket을 성공적으로 사용하고 간단한 채팅방을 만들었습니다. 이 튜토리얼이 당신에게 도움이 되기를 바랍니다.
위 내용은 PHP에서 WebSocket을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!