2011-01-11 2 views
1

글쎄, 플레이어가 계속 걸을 수있는지도로 PHP 웹 게임 만들기. 그러나 나는 게임의 전반적인 성능에 대해 매우 중요합니다. Im는지도로 PHP 게임을 만들고, 몇 가지 질문이 있습니다.

(페이지 시작) :

  1. 페이지 내가지도 코드에 iframe이 함께 아래 채팅이 등으로 메인 페이지를 만들어 자원을 절약 시작 : 그것은이 같은 비트가 합니다 (map.php 코드와 iframe이) 는 (끝 페이지) 나는 모든 페이지를 다시로드 필요 없다, 우리가지도를 걷는 동안 대화는 여전히 유효이 너무

    (chat.php 포함).

    1. 지도 코드 : 처음에 그것은 매우 느리고 버그했지만, 난과 같이 매우 간단 실행되도록 관리 : 지도가 9 × 9의 단일 타일 영역으로 나누어, 각 행에 저장된다 지도. 그래서 내 DB는 다음과 같이 보입니다 :

    id-map (이것은 타일의 위치를 ​​정의합니다) -tile (타일의 img) -block (타일이 walkable인지 아닌지))

    그래서 맵을 생성 할 때 map X의 모든 행을 선택하도록 요청하면 스크립트는 9 개의 행과 9 개의 collumns 테이블을 만들고 특정 타일 이미지로 각 셀의 배경을 설정합니다.

    스크립트가 실행되는 동안지도에서 다른 플레이어와 개체에 대한 DB도 같은 방식으로 묻지 만 배경이 아닌 셀 안에 img로 표시합니다.

    db에 대한 호출을 저장하려면 다음과 같은 생각이 들었습니다. 맵 작성의 각 루프에서 실제 맵 위치와 값이 숨겨진 입력을 생성하고 값이 img이므로 ​​브라우저에 저장됩니다. 우리가 걸을 때마다 우리는 그것을 입력하면지도를 요구할 때마다 다시 보낸다.

    보행을 위해 나는 큰 모양을 만들었고, 화살표가 걷는 화살표는 도보를 할 때마다 POST를 보내고 어느 방향으로 걸어 갔는지에 따라 DB를 업데이트하고 다시 생성합니다.

    잘 있습니다. 이미 GZip 압축을 사용하고 있습니다. 내 질문은 다음과 같습니다.

    1- 50 명이 동시에 걷는 경우 서버가 과부하가됩니까? 2이지도 스크립트에해야 할 팁, 개선점 또는 최적화가 있습니까? DB 호출을 저장하고 오버로드를 줄이는 방법이 될 수 있습니까?

+0

구체적인 세부 사항이 필요합니다. 서버는 무엇입니까? 시간 비용을 측정 했습니까? 얼마나 많은 데이터가 전송됩니까? 화면 당 얼마나 많은 행이 선택 되었습니까? 데이터베이스는 어떻게 인덱싱됩니까? –

+0

정보가 부족하여 죄송합니다. 서버는 Apache와 MySQL이있는 XAMMP 서버입니다. 나는 아무 것도 측정하지 않았다. 나는 얼마나 많이 옮겨 졌는지 정말로 모른다. 81 행이 선택됩니다. id가 기본 키이고 map collumn을 인덱싱했습니다. – Lordareon

+2

AJAX를 거부하면 매번 전체 페이지를 작성/전송하지 않고 서버로드를 줄이기보다는 아주 작은 데이터 비트를 클라이언트로 다시 보내는 방법을 거부하게됩니다. 응용 프로그램에서 사용할 수있는 고도의 관련 기술을 사용하지 못할 수도 있습니다. – webbiedave

답변

2

예, 서버가 과부하 것 (내가 아약스를 사용 싶지 않다). 또한 지연은 게임을 견딜 수 없게 만듭니다.

Ajax를 사용하십시오.

서버/DB에 작업 명령을 보냅니다. "MOVE | PLAYER 1 | 3 | 3"

그런 다음 클라이언트가 DB에서 업데이트 명령을 받도록하십시오. "공격 - 플레이어 1 | 플레이어 2 | 피해 = 30"

업데이트 할 대상 만 업데이트하십시오. 전체 맵을 새로 고치지 마십시오.

아직 지연이 있지만 더 많은 플레이어를 정상적으로 처리 할 수 ​​있습니다.

관련 문제