>백엔드 개발 >PHP 튜토리얼 >PHP를 통해 WebSocket 프로토콜로 실시간 통신하는 방법

PHP를 통해 WebSocket 프로토콜로 실시간 통신하는 방법

王林
王林원래의
2023-07-29 22:04:541962검색

PHP를 통해 WebSocket 프로토콜로 실시간 통신하는 방법

웹 애플리케이션이 발전하면서 온라인 채팅, 주식 시세 등 많은 시나리오에서 실시간 통신이 매우 중요해졌습니다. WebSocket 프로토콜은 웹 브라우저와 서버 간의 실시간 통신 연결을 설정하도록 설계되었습니다. 이 기사에서는 실시간 통신을 위해 PHP 및 WebSocket 프로토콜을 사용하는 방법을 소개하고 관련 코드 예제를 제공합니다.

1. WebSocket 프로토콜 소개
WebSocket 프로토콜은 TCP 프로토콜을 기반으로 구축된 전이중 통신 프로토콜로, 서버가 클라이언트에 메시지를 적극적으로 푸시하고 클라이언트로부터 메시지를 받을 수 있습니다. 기존 HTTP 프로토콜과 비교하여 WebSocket 프로토콜은 다음과 같은 특징을 가지고 있습니다.

  1. 실시간 양방향 통신: WebSocket은 클라이언트가 지속적으로 서버를 폴링하지 않고도 서버와 클라이언트 간의 실시간 양방향 통신을 달성할 수 있습니다. .
  2. 낮은 통신 오버헤드: HTTP 프로토콜에 비해 WebSocket 프로토콜은 통신 헤더가 더 작아서 통신 오버헤드가 줄어듭니다.
  3. 더 높은 성능: WebSocket 프로토콜은 긴 연결을 설정할 수 있으므로 각 요청의 핸드셰이크 오버헤드를 줄여 통신 성능을 향상시킵니다.

2. PHP WebSocket 확장
PHP는 공식적으로 WebSocket을 직접 지원하지 않지만, 확장 기능을 설치하고 사용하면 WebSocket 기능을 구현할 수 있습니다. 현재 더 일반적으로 사용되는 PHP WebSocket 확장은 다음과 같습니다.

  1. Ratchet: WebSocket 서버 및 클라이언트에 대한 지원을 제공하는 경량 PHP WebSocket 라이브러리로, 사용하기 쉽고 포괄적인 기능을 갖추고 있습니다.
  2. Swoole: WebSocket 서버 및 클라이언트를 구현할 수 있는 고성능 PHP 네트워크 통신 라이브러리입니다.
  3. Workerman: WebSocket 서버 및 클라이언트를 지원하는 다중 스레드 PHP 소켓 프레임워크입니다.

공간 제한으로 인해 이 기사에서는 데모용 예로 Ratchet 확장을 사용합니다.

3. Ratchet 확장 설치
Composer를 통해 Ratchet 확장을 설치할 수 있으며 다음 명령을 실행하여 설치할 수 있습니다.

composer require cboden/ratchet

4. WebSocket 서버 생성
다음은 수신된 메시지를 반환할 수 있는 간단한 WebSocket 서버 구현입니다. 그대로 클라이언트에게:

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

require 'vendor/autoload.php';

class MyWebSocketServer implements MessageComponentInterface {
    protected $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) {
            $client->send($msg);
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "Error: {$e->getMessage()}
";
        $conn->close();
    }
}

$server = App::make('RatchetServerIoServer', [
    new AppMyWebSocketServer()
]);

$server->run();

5. WebSocket 클라이언트 생성
다음은 위 서버와 통신할 수 있는 간단한 WebSocket 클라이언트 구현입니다.

<?php
use RatchetClientWebSocket;
use RatchetClientConnector;
use ReactEventLoopFactory as EventLoopFactory;

require 'vendor/autoload.php';

$loop = EventLoopFactory::create();
$connector = new Connector($loop);

$connector('ws://localhost:8000')->then(function (WebSocket $conn) {
    $conn->on('message', function ($msg) use ($conn) {
        echo "Received: {$msg}
";
        $conn->close();
    });

    $conn->send('Hello, WebSocket Server!');
}, function (Exception $e) use ($loop) {
    echo "Could not connect: {$e->getMessage()}
";
    $loop->stop();
});

$loop->run();

6. WebSocket 서비스 실행
다음을 통해 WebSocket 서버를 시작합니다. 명령줄:

php server.php

그런 다음 클라이언트 코드를 실행합니다.

php client.php

그러면 클라이언트와 서버 간의 실시간 통신이 이루어질 수 있습니다.

요약:
이 기사에서는 실시간 통신을 위해 PHP 및 WebSocket 프로토콜을 사용하는 방법을 간략하게 소개하고 Ratchet 확장의 관련 코드 예제를 제공합니다. WebSocket 프로토콜을 통해 서버를 구현하여 메시지를 클라이언트에 적극적으로 푸시하고 실시간 양방향 통신을 달성할 수 있습니다. PHP WebSocket 확장을 사용하면 WebSocket 서버와 클라이언트를 쉽게 생성하고 간단한 코드를 통해 실시간 통신을 구현할 수 있습니다.

위 내용은 PHP를 통해 WebSocket 프로토콜로 실시간 통신하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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