2012-10-09 5 views
3

저는 온라인 기반 connect4 게임을 만들고 있는데, 대부분은 완벽하게 작동합니다.온라인 게임은 플레이어를 어떻게 연결합니까?

이동이 이루어지면 게임은 공개적으로 표시되는 텍스트 파일에 세션에 사용 된 데이터를 쓰고 (jQuery를 사용하여) 다른 플레이어가 읽는 PHP 스크립트를 호출합니다. 컴퓨터가 그에 따라 업데이트하고 렌더링합니다.

그러나 이것이이 목표를 달성하는 매우 나쁜 방법이라고 생각합니다. 나는 소켓을 사용하는 것에 대해 생각해 왔지만 들어오는 패킷을 수신하는 컴퓨터에서 실행되는 데몬이 없으며 포트가 플레이어 컴퓨터에서 전달되지 않기 때문에 어떻게 소켓을 사용하여이 효과를 얻을 수 있는지 확신 할 수 없습니다.

+0

왜 XML 파일이 아닌가요? – sreejith

+1

웹 소켓, 폴링, 푸시, 많은 기술 선택 – ianace

+0

@sreejith 확실하지 않은 경우. 이 상황에서 XML 파일은 텍스트 파일에 비해 어떤 이점이 있습니까? – CodeCaster

답변

1

몇몇 온라인 게임은 직접 플레이어를 연결합니다. 거의 모든 온라인 게임에서 모든 데이터 교환은 중앙 서버를 거칩니다. 부정 행위를 방지하는 것이 중요합니다. 중립 서버가 게임 상태를 관리하는 한 어떤 클라이언트도 게임 상태를 조작 할 수 없습니다.

대역폭을 절약하기 위해 매 움직임마다 전체 게임 상태를 읽는 것이 좋은 방법은 아닙니다. 다른 모든 정보가 중복되는 것처럼 클라이언트가 다른 플레이어가 한 동작에 대해서만 알면 더 좋을 것입니다.

자바 스크립트 웹 소켓은 다른 플레이어에게 업데이트를 푸시하는 가장 좋은 옵션입니다. 불행하게도 모든 브라우저가 아직이를 지원하지는 않습니다 (Internet Explorer는 Windows 7 이전의 운영 체제에서는 지원하지 않습니다). 열등하지만 훨씬 더 광범위하게 지원되는 옵션은 AJAX입니다.

1

일반적으로 파일 대신 PHP가있는 mySQL 데이터베이스를 사용합니다.

$gamestate_serialized= mysql_real_escape_string(serialize($gamestate_array)); 
$gameID= intval($gameID); 
$query= "insert into gamestate (gameID, state) values ($gameID,'$gamestate_serialized')"; 
$handle= mysql_query($query); 
if(!$handle) print mysql_error(); 

과 같이 읽어 : 그것은 당신이 같은 gamestate을 작성할 수 있습니다, 더 나은하지만 PDO 같은 데이터베이스 계층을 사용하는 것입니다

$gameID= intval($gameID); 
$query= "select state from gamestate where gameID=$gameID"; 
$handle= mysql_query($query); 
if(!$handle) print mysql_error(); 
$row = mysql_fetch_assoc($handle); 
$state_array= unserialize($row['state']); 
관련 문제