>  기사  >  백엔드 개발  >  PHP에서 WebSocket을 사용하는 방법

PHP에서 WebSocket을 사용하는 방법

WBOY
WBOY원래의
2023-06-11 18:09:142494검색

네트워크 기술의 발전으로 WebSocket(웹 소켓)은 브라우저와 서버 사이에 실시간 통신 채널을 구축하여 연결을 유지할 수 있는 인기 있는 프로토콜이 되었습니다. 이 프로토콜은 웹 애플리케이션에서 실시간 통신 기능을 활성화하는 데 큰 역할을 합니다.

PHP 개발 분야에서는 WebSocket의 사용이 점점 더 늘어나고 있습니다. 이번 글에서는 PHP에서 WebSocket을 사용하는 방법을 소개하겠습니다.

  1. 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
  1. PHP WebSocket 서버 작성

이 예에서는 다음을 사용하여 간단한 채팅방을 구현하겠습니다. 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 함수가 호출됩니다.

  1. 클라이언트 측 JavaScript 코드 작성

다음으로 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를 직접 사용하여 서버에 연결하고 메시지를 보내고 받습니다.

  1. WebSocket 서버 실행

위 단계를 완료하면 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에서 수신 대기하고 있음을 의미합니다.

  1. WebSocket 연결 테스트

마지막으로 브라우저를 열고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.