PHP와 Websocket을 사용하여 실시간 게임 데이터 동기화를 달성하는 방법

WBOY
풀어 주다: 2023-06-28 09:44:01
원래의
1168명이 탐색했습니다.

인터넷 기술의 발전으로 게임 분야에서도 실시간 게임 데이터 동기화가 필요합니다. WebSocket 프로토콜은 클라이언트와 서버 간의 양방향 통신에 사용되는 기술로, 실시간 데이터 동기화 가능성을 제공합니다.

이 문서에서는 PHP와 WebSocket을 사용하여 실시간 게임 데이터 동기화를 달성하는 방법을 소개합니다. 구체적인 구현 단계는 다음과 같습니다.

1단계: WebSocket 이해

WebSocket은 클라이언트와 클라이언트 간의 지속적인 연결을 활용하는 HTML5 프로토콜입니다. 서버, 실시간 양방향 통신을 달성합니다. WebSocket 연결이 설정된 후 서버와 클라이언트는 실시간 동기화를 달성하기 위해 실시간 데이터를 서로 보낼 수 있습니다.

2단계: WebSocket 서버 작성

PHP에서는 Ratchet 라이브러리를 사용하여 WebSocket 서버를 구현할 수 있습니다. Ratchet은 ReactPHP를 이벤트 라이브러리로 사용하여 연결과 데이터 수신 및 전송을 처리하는 PHP WebSocket 구현 라이브러리입니다.

먼저 종속성을 관리하려면 Composer를 설치해야 합니다. 프로젝트 루트 디렉터리에 작곡가.json 파일을 생성하고 다음 코드를 작성합니다:

{

"require": {
    "cboden/ratchet": "^0.4.3",
    "react/event-loop": "^1.0.0",
    "react/socket": "^1.0.0",
    "react/http": "^1.0.0"
}
로그인 후 복사

}

그런 다음 명령줄에서 다음 명령을 실행하여 Ratchet 및 해당 종속 항목을 설치합니다.

composer install

Next , server.php라는 파일을 생성합니다. 이 파일은 WebSocket 서버의 진입점이 됩니다. 다음 코드를 사용하여 이 파일에 WebSocket 서버 인스턴스를 생성합니다:


class Game은 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) {
        if ($from !== $client) {
            $client->send($msg);
        }
    }
}

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

public function onError(ConnectionInterface $conn, Exception $e)
{
    $conn->close();
}
로그인 후 복사

}

$server = IoServer를 구현합니다. :factory(

new HttpServer(
    new WsServer(
        new Game()
    )
),
8080
로그인 후 복사

);

$server->run();

We create WebSocket의 프로세서로 Game이라는 클래스를 생성합니다. 이 클래스는 Ratchet의 MessageComponentInterface 인터페이스를 구현합니다. onOpen은 새 WebSocket 클라이언트가 연결될 때를 나타내고, onMessage는 클라이언트가 보낸 메시지가 수신될 때를 나타내고, onClose는 WebSocket 클라이언트의 연결이 끊어질 때를 나타냅니다. 오류가 발생합니다.

Game 클래스에서는 SplObjectStorage 개체를 사용하여 연결된 모든 클라이언트를 저장합니다. onOpen 메서드에서는 연결 개체를 SplObjectStorage에 연결합니다. onMessage 메소드에서는 SplObjectStorage의 모든 클라이언트를 반복하고 수신된 메시지를 보냅니다. onClose 메서드에서는 SplObjectStorage에서 연결 개체를 제거합니다.

마지막으로 IoServer 클래스를 사용하여 WebSocket 서버를 생성하고 실행합니다. HTTP 및 WebSocket 요청을 모두 처리할 수 있도록 HttpServer와 WsServer를 함께 래핑합니다. WebSocket 서버의 포트 번호로 8080을 사용했으며 필요한 경우 변경할 수 있습니다.

3단계: WebSocket 클라이언트 작성

클라이언트에서는 JavaScript를 사용하여 WebSocket 연결을 구현합니다. JavaScript에서는 WebSocket 객체를 생성하고 서버에 연결해야 합니다. WebSocket 객체의 상태가 변경되면 처리를 위해 WebSocket 이벤트 핸들러가 호출됩니다.

여기에서는 jQuery를 사용하여 DOM 요소를 쉽게 조작하고 이벤트를 처리해 보겠습니다. 먼저 서버에 메시지를 보내기 위해 HTML로 간단한 텍스트 입력 상자와 버튼을 만듭니다.

<title>Real-time Game Data Synchronization</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="client.js"></script>
로그인 후 복사

<input type="text" id="message">
<button id="send">Send</button>
<div id="messages"></div>
로그인 후 복사

< ;/ body>


그런 다음 WebSocket 클라이언트의 진입점이 될 client.js라는 JavaScript 파일을 만듭니다. 다음 코드를 사용하여 이 파일에 WebSocket 연결을 만듭니다.


$(document).ready(function() {

var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function(evt) {
    console.log('Connected to server');
};

conn.onmessage = function(evt) {
    console.log('Received message: ' + evt.data);
    $('#messages').append($('<p>').text(evt.data));
};

conn.onclose = function(evt) {
    console.log('Connection closed');
};

$('#send').click(function() {
    var message = $('#message').val();
    conn.send(message);
    $('#message').val('');
});
로그인 후 복사

})

페이지 로드가 완료되면 먼저 WebSocket 연결을 만듭니다. 연결이 열립니다. onopen 메소드를 호출하십시오. onmessage 메소드에서는 수신된 메시지를 콘솔과 페이지의 메시지 상자에 출력합니다. 연결이 닫히면 onclose 메서드를 호출합니다.

버튼을 클릭하면 텍스트 입력 상자에서 메시지를 받아 WebSocket 서버로 보냅니다.

4단계: WebSocket 연결 테스트

마지막으로 브라우저를 사용하여 로컬에서 WebSocket 연결을 테스트할 수 있습니다. 명령줄에서 WebSocket 서버를 실행하려면 다음 명령을 실행하세요:

php server.php

그런 다음 브라우저를 열고 다음 URL을 입력하세요:

http://localhost:8000/

다음을 입력하세요. 페이지 메시지를 확인하고 "보내기" 버튼을 클릭하면 메시지가 서버에서 수신되어 클라이언트로 다시 전송됩니다. 페이지에 메시지 상자가 표시되고 콘솔 출력에 해당 메시지가 표시됩니다.

이 시점에서 우리는 PHP와 WebSocket을 사용하여 실시간 게임 데이터 동기화를 성공적으로 구현했습니다. 실시간 데이터 동기화는 게임뿐만 아니라 라이브 채팅, 협업 편집 등 다양한 애플리케이션에서도 가능합니다. 이 기사가 WebSocket의 작동 방식을 이해하고 WebSocket 구현을 안내하는 데 도움이 되기를 바랍니다.

위 내용은 PHP와 Websocket을 사용하여 실시간 게임 데이터 동기화를 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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