PHP 및 WebSocket: 실시간 데이터 전송 모범 사례

WBOY
풀어 주다: 2023-12-17 21:22:02
원래의
656명이 탐색했습니다.

PHP和WebSocket: 实现实时数据传输的最佳实践

최근 몇 년 동안 인터넷의 급속한 발전으로 실시간 통신에 대한 요구가 점점 더 강력해졌고, WebSocket의 등장으로 실시간 데이터 전송을 위한 더욱 우아한 솔루션이 제공되었습니다. 웹 개발에서 PHP 언어는 주류 백엔드 언어 중 하나를 차지합니다. 그렇다면 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 달성하는 방법은 무엇입니까?

1. WebSocket이란

WebSocket은 HTTP/HTTPS 프로토콜의 포트 80 또는 443을 통해 통신하는 전이중 통신 프로토콜입니다. WebSocket이 연결을 설정하면 "요청-응답" 모드가 필요 없이 클라이언트와 서버 모두 서로 메시지를 보낼 수 있으므로 강력한 실시간 성능, 양방향 통신 및 낮은 장점이 있습니다. 오버헤드가 있으며 실시간 채팅, 온라인 게임 및 빠른 상호 작용이 필요한 기타 시나리오에 적합합니다.

2. PHP에서 WebSocket 사용

웹 개발에서 일반적으로 사용되는 PHP 프레임워크에는 Laravel, CodeIgniter 등이 있습니다. 다음은 Laravel을 예로 들어 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 달성하는 방법을 소개합니다.

  1. Ratchet 설치

Ratchet은 WebSocket 서버를 구현하는 데 사용할 수 있는 PHP용 WebSocket 라이브러리입니다. Laravel 프로젝트에서는 작곡가를 통해 설치할 수 있습니다. 명령은 다음과 같습니다.

$ composer require cboden/ratchet
로그인 후 복사
  1. WebSocket 컨트롤러 만들기

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 메소드는 연결 오류가 발생할 때의 콜백 메소드를 나타냅니다.

  1. WebSocket 서비스 생성

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입니다.

  1. 클라이언트 코드

프런트 엔드 페이지에서는 아래와 같이 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 메소드를 호출하십시오.

  1. Test

Laravel 프로젝트를 시작한 후 브라우저에서 http://localhost/chat에 접속하여 WebSocket을 통해 서버와 연결하여 실시간 데이터 전송이 이루어지도록 합니다.

위는 PHP와 WebSocket을 사용하여 실시간 데이터 전송을 구현하는 코드 예제입니다. 실제 필요에 따라 애플리케이션의 실시간 성능과 성능을 향상시킬 수 있습니다.

위 내용은 PHP 및 WebSocket: 실시간 데이터 전송 모범 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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