PHP와 WebSocket을 이용한 실시간 통신

王林
풀어 주다: 2023-06-28 11:40:02
원래의
1223명이 탐색했습니다.

인터넷 기술의 발전으로 실시간 소통의 실현에 중점을 두는 웹사이트와 애플리케이션이 점점 많아지기 시작했습니다. WebSocket 프로토콜은 실시간 통신을 달성하는 효과적인 방법으로 간주됩니다. 이 기사에서는 PHP와 WebSocket을 사용하여 실시간 통신 기능을 구현하는 방법을 소개합니다.

WebSocket이란 무엇입니까

WebSocket은 브라우저와 서버 간에 지속적인 연결을 설정하여 양방향 실시간 통신을 달성할 수 있는 TCP 기반 프로토콜입니다. HTTP 프로토콜과 달리 WebSocket 프로토콜은 서버의 응답을 받기 위해 브라우저가 요청을 보낼 필요가 없지만 양방향으로 직접 통신할 수 있습니다.

WebSocket은 긴 연결 방식을 사용하기 때문에 데이터 전송 효율을 크게 향상시키고 서버의 부하를 줄일 수 있습니다. 실시간 통신 시나리오에서 WebSocket은 필수적인 기술이 되었습니다.

PHP 및 WebSocket

PHP에는 서버 측 언어로서 WebSocket을 지원하는 일부 프레임워크도 있습니다. 가장 유명한 것 중에는 Rachet 프레임워크, Swoole 프레임워크 등이 있습니다.

이 기사에서는 Rachet 프레임워크를 사용하여 실시간 통신 기능을 구현합니다. Rachet 프레임워크는 PHP용 오픈 소스 프레임워크로 WebSocket의 서버측 구현을 제공하며 Apache, Nginx 등과 같은 다양한 웹 서버를 지원할 수 있습니다.

구현 단계

1. Rachet 프레임워크 설치

Composer를 사용하여 Rachet 프레임워크 설치:

composer require cboden/ratchet
로그인 후 복사

2. PHP 코드 작성

다음은 Rachet 프레임워크를 사용하여 실시간 통신을 구현하는 간단한 PHP 코드입니다. :

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require 'vendor/autoload.php';

class MyChat 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();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MyChat()
        )
    ),
    8080
);

$server->run();
로그인 후 복사

코드에는 Ratchet 프레임워크에서 MessageComponentInterface 인터페이스를 구현하는 MyChat이라는 클래스가 정의되어 있습니다. 여기에는 다음 4가지 메서드가 포함되어 있습니다.

  • onOpen()은 새 연결이 설정될 때 호출됩니다.
  • onOpen() 当有新的连接建立时被调用。
  • onMessage() 当代码接收到消息时被调用。
  • onClose() 当连接被关闭时被调用。
  • onError() 当出现错误时被调用。

其中,onOpen() 方法记录了新连接建立的信息,onMessage() 方法将接收到的消息广播给所有连接的客户端,而onClose() 方法记录连接关闭的信息。

最后,代码通过IoServer::factory()onMessage() 코드가 메시지를 수신하면 호출됩니다.

onClose() 연결이 닫힐 때 호출됩니다.

onError() 오류가 발생하면 호출됩니다.

그 중 onOpen() 메소드는 새로운 연결에 의해 설정된 정보를 기록하고, onMessage() 메소드는 수신된 메시지를 브로드캐스트합니다. 모든 연결에 연결되고 onClose() 메서드는 연결 종료 정보를 기록합니다.

마지막으로 코드는 IoServer::factory()를 사용하여 서버를 생성하고 모니터링을 활성화합니다.

3. 테스트

명령줄에서 서버를 시작하세요.

php chat-server.php
로그인 후 복사
그런 다음 브라우저에서 여러 클라이언트 페이지를 열면 각 페이지에서 실시간 메시지를 보내고 받을 수 있어 실시간 통신 효과를 얻을 수 있습니다. 🎜🎜요약🎜🎜이 글에서는 PHP와 Rachet 프레임워크를 사용하여 실시간 통신 기능을 구현하는 방법을 소개합니다. WebSocket 프로토콜을 사용하면 브라우저와 서버 간에 지속적인 연결이 설정되고 양방향 실시간 통신이 가능합니다. 실시간 통신 시나리오에서 WebSocket 프로토콜의 사용은 필수 기술이 되었으며 Rachet 프레임워크는 간단하고 효율적인 구현 방법을 제공합니다. 🎜

위 내용은 PHP와 WebSocket을 이용한 실시간 통신의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿