Skocz do zawartości

[PHP][JS] Includowanie mapki


Rekomendowane odpowiedzi

Witam serdecznie!

Chciałem nieco poprawić wydajność mojego skryptu mapki, i postanowiłem wszystko przenieść do pliku - lecz życie nie jest tak piękne jak mi się wydawało heh , zamiast raz wczytać plik który ma ok. 250 kB (Tablice z danymi mapki), to muszę go wczytywać za każdym razem jak chce odświeżyć mapę. Dam troszkę kodu:

 

Plik: Panel.map.php ( Ten plik jest wczytywany do diva o id MAP )

<?php
session_start();
$x=$_SESSION['x'];
$y=$_SESSION['y'];
include('mapdata.php'); <=====================================TUTAJ 
echo $_SESSION['x'];
echo $_SESSION['y']."<br/>";
echo "<img src='img/map/".$map_data[$x-5][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+3].".PNG' width='32'>";
echo "<br/>";
//1 linijka
echo "<img src='img/map/".$map_data[$x-5][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+2].".PNG' width='32'>";
... I tak dalej :)
?>

 

Plik site.js

function show_map(){
    var req = mint.Request();
    req.Send("panel.map.php", "map");
}

var gotowy=true;

function start()
{
gotowy=true;
document.getElementById('ready').innerHTML="";
}

function go(where) {
    var req = mint.Request();
    req.Send("ruch.map.php?a="+where, "ruch");    
    show_map();
}



function przechwyc(e) {
    var event = window.event || e;
    switch(event.keyCode){
        case 83:
            go("down");
        break;
        
        case 87:
            go("up");
        break;    
        
        case 68:
            go("right");
        break;    
        
        case 65:
            go("left");
        break;
    }            
}

document.onkeydown = przechwyc;

 

A to część pliku z grą :

<div id='map'></div>
<div id='ruch'></div>

 

A chciałem żeby było tak:

<?php include('mapdata.php'); ?>
<div id='map'></div>
<div id='ruch'></div>

 

Wie ktoś jak zrobić aby plik mapdata.php nie wczytywał się za każdym razem?

Jedynym plusem jest to że mapka może być wielka a to i tak zżera prawie tyle samo :)

Odnośnik do komentarza
Udostępnij na innych stronach

Wie ktoś jak zrobić aby plik mapdata.php nie wczytywał się za każdym razem?
http://php.net/manual/en/function.include-once.php

 

:)

 

Szczerze, nie za bardzo rozumiem Twojego problemu.

Ładujesz mapę z pliku PHP i za każdym wywołaniem skryptu PHP MUSISZ ją ładować.

 

Chyba, że przeglądarka będzie przechowywać niektóre informacje za pomocą JS.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie, bo przeglądarka by przechowywała takie informacje.

Kwestia tego jak dużo danych masz do przetworzenia, jakie to informacje, etc.. Jeśli ładujesz tylko "budowę" mapy, która się nie zmienia w żaden sposób, to możesz próbować ładować ją do JS.

 

Trudno Ci pomóc, nie wiem co robisz, czego oczekujesz, czy jak to ma wyglądać.

Odnośnik do komentarza
Udostępnij na innych stronach

Heh plik którego nie chce ładować za każdym razem zawiera tablice (około 10 000)m każda z nich składa się z X,Y oraz S ( Stylu ) :

To jest część tego pliku, pierwszy nawias klamrowy to X, drugi to Y , a wartość tablicy to Styl.

$map_data[56][62] = 0;
$map_data[56][63] = 0;
$map_data[56][64] = 0;
$map_data[56][65] = 0;
$map_data[56][66] = 0;
$map_data[56][67] = 0;
$map_data[56][68] = 0;
$map_data[56][69] = 0;
$map_data[56][70] = 0;
$map_data[56][71] = 0;
$map_data[56][72] = 0;
$map_data[56][73] = 0;

 

Następnie w pliku który odświeżam ( Gdy bohater się porusza ) są dane o wyświetlaniu mapki ( Graficznie ) czyli funkcje echo i img.

 

<?php
session_start();
$x=$_SESSION['x'];
$y=$_SESSION['y'];
include_once 'mapdata.php';
echo "<img src='img/map/".$map_data[$x-6][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y+5].".PNG' width='32'>";
echo "<br/>";
echo "<img src='img/map/".$map_data[$x-6][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y+4].".PNG' width='32'>";
echo "<br/>";
echo "<img src='img/map/".$map_data[$x-6][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y+3].".PNG' width='32'>";
echo "<br/>";
//1 linijka
echo "<img src='img/map/".$map_data[$x-6][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y+2].".PNG' width='32'>";
echo "<br/>";
//2 linijka
echo "<img src='img/map/".$map_data[$x-6][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y+1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y+1].".PNG' width='32'>";
echo "<br/>";
//3 linijka
echo "<img src='img/map/".$map_data[$x-6][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y].".PNG' width='32'>";
echo "<br/>";
//4 linijka
echo "<img src='img/map/".$map_data[$x-6][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y-1].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y-1].".PNG' width='32'>";
echo "<br/>";
//5 linijka
echo "<img src='img/map/".$map_data[$x-6][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y-2].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y-2].".PNG' width='32'>";
echo "<br/>";
//6 linijka
echo "<img src='img/map/".$map_data[$x-6][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y-3].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y-3].".PNG' width='32'>";
echo "<br/>";
//7 linijka
echo "<img src='img/map/".$map_data[$x-6][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y-4].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y-4].".PNG' width='32'>";
echo "<br/>";
//8 linijka
echo "<img src='img/map/".$map_data[$x-6][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-5][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-4][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-3][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-2][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x-1][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+1][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+2][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+3][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+4][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+5][$y-5].".PNG' width='32'>";
echo "<img src='img/map/".$map_data[$x+6][$y-5].".PNG' width='32'>";
echo "<br/>";
?>

Aktualnie X i Y to Sesja ale to się zmieni.

 

Czyli podsumowując:

- Co robię?

Mapkę do gry dynamicznej przez przeglądarkę typu Kosmiczni itp.

- Czego oczekuję?

Oczekuję by mój skrypt działał na tyle szybko by nie zniechęcał do grania

- Jak ma to wyglądać?

To już jest w pliku z echo i <img> . Ma to być prostokąt składający się z obrazków których SRC jest pobierane z tej właśnie tablicy.

Odnośnik do komentarza
Udostępnij na innych stronach

Wyświetlanie mapki udało mi się zrobić w pętlach:

for( $yy = 6; $yy >= 0; $yy-- ) { //Wysokość górnej części mapy
for ($xx = 7; $xx >= 0; $xx --) { //Szerokość 
$xxx = $x-$xx;
$yyy = $y+$yy;
echo "<img src='img/map/".$map_data[$x-$xx][$y+$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >";
}
for ($xx = 1; $xx <= 7; $xx ++) { //Szerokość
$xxx = $x+$xx;
$yyy = $y+$yy;
echo "<img src='img/map/".$map_data[$x+$xx][$y+$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >";
}
echo "<br/>";
}

for( $yy = 1; $yy <= 6; $yy++ ) { 
for ($xx = 7; $xx >= 0; $xx --) { //Szerokość 
$xxx = $x-$xx;
$yyy = $y-$yy;
echo "<img src='img/map/".$map_data[$x-$xx][$y-$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >";
}
for ($xx = 1; $xx <= 7; $xx ++) { //Szerokość
$xxx = $x+$xx;
$yyy = $y-$yy;
echo "<img src='img/map/".$map_data[$x+$xx][$y-$yy].".PNG' class='editor-img' onclick='zmien(".$xxx.",".$yyy.")' >";
}
echo "<br/>";
}

Ale mam jeszcze 1 pytanie ( Oprócz tamtego bo jeszcze nie rozkminiłem tych funkcji co mi podałeś :) ) :

Jak mam ten plik z tablicami w php, i chce edytować 1 tablice np. która będzie zaczynać się tak:

$map_data[56][70] = 0;

i chce zmienić z 0 na 1. Jakiej funkcji operacji na plikach użyć ?

 

 

PS. Do czego jest ta funkcja serialize(); ? Żeby wszystkie dane z tabeli pobrać do jednej zmiennej?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Tak, jako ciąg znaków (jeden string), a unserialize to odwraca. Pamiętaj, że tablice sobie możesz łączyć, rozdzielać itp. więc możesz np. zapisywać tylko ich kawałki, albo dla każdego gracza jego obecną mapę osobno.

Odnośnik do komentarza
Udostępnij na innych stronach

Macie beznadziejne pomysły.

<?php

    class Map
    {
    
        private $handle, $width, $height, $size;
    
        public function __construct( $file, $width = 50, $height = 50 )
        {
            $this->width = $width;
            $this->height = $height;
            $this->size = $width * $height;

            if( file_exists( $file ) )
            {
                if( !( $this->handle = @fopen( $file, 'r+' ) ) )
                    throw new Exception( 'Unable to open map file' );
            }
            else
            {
                if( !( $this->handle = @fopen( $file, 'w+' ) ) )
                    throw new Exception( 'Unable to crate map file' );

                fseek( $this->handle, $this->size - 1, SEEK_SET );
                fwrite( $this->handle, chr( 0 ) );
                fseek( $this->handle, 0, SEEK_SET );
            }
        }
        
        public function get( $x, $y )
        {
            $position = $x + $y * $this->width;
            if( $position < 0 || $position > $this->size )
                throw new Exception( 'Reading position out of range' );
            fseek( $this->handle, $position - 1, SEEK_SET );
            return ord( fread( $this->handle, 1 ) );
        }

        public function set( $x, $y, $value )
        {
            $position = $x + $y * $this->width;
            if( $position < 0 || $position > $this->size )
                throw new Exception( 'Writing position out of range' );
            fseek( $this->handle, $position - 1, SEEK_SET );
            fwrite( $this->handle, chr( $value ), 1 );
        }
        
        public function __get( $name )
        {
            if( $name == 'width' || $name == 'height' || $name == 'size' )
                return $this->{$name};
        }
        
        public function __destruct()
        {
            fclose( $this->handle );
        }
    
    }
    
    $map = new Map( 'map.bin', 20, 10 );
    
    $map->set( 4, 3, 255 );
    $map->set( 4, 4, 255 );
    $map->set( 4, 5, 255 );
    $map->set( 5, 4, 255 );
    $map->set( 6, 4, 255 );
    $map->set( 7, 4, 255 );
    
    echo '<table>';
    for( $y = 0; $y < $map->height; $y++ )
    {
        echo '<tr>';
        for( $x = 0; $x < $map->width; $x++ )
        {    
            if( $map->get( $x, $y ) )
                echo '<td>X</td>';
            else
                echo '<td> </td>';
        }
        echo '</tr>';
    }
    echo '</table>';
?>

Prosta klasa mapy z przykładem. Wtedy nie musisz ładować całego pliku tylko czytasz to co Ci potrzebne.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Jeszcze wracając do głównego pytania tematu - przecież raz inkludujesz mapę, tak jak to Tymon napisał. Zapewne chodzi Ci o to, żeby za każdym wywołaniem strony php nie przetwarzało tego pliku, tak? Nie da się ze względu na specyfikę hostowania stron php -> skrypt jest odpalany kiedy jest wywoływany, a zakończeniu zamykany. Żeby osiągnąć co chcesz, to byś musiał pomyśleć nad skryptem php działającym w trybie cli, czyli napisać aplikację serwerową działającą 24/h jako osobny proces na (a php jest lipne pod tym względem). Ewentualnie zainteresuj się przerzuceniem na alternatywne środowiska, gdzie aplikacje www są procesami działającymi w tle - asp.net, zope itd.

 

Ja nie widzę jednak problemu w twoim przypadku. Nie musisz dokonywać żadnych zmian w twoich skryptach php, by osiągnąć przybliżoną funkcjonalność. Wystarczy że zostanie dograny jakiś moduł keszujący w stylu eaccelerator, xcache czy apc i odpowiednio skonfigurowany, by skrypty php leżały sobie jak najczęściej w pamięci w formie skompilowanej do bajtkodu. Wtedy żadne fizyczne odczyty z dysku nie mają miejsca. Kłopot jest jednak w tym, że Ty chcesz dynamicznie zmieniać wartości mapy, czyli musisz manipulować tym plikiem jak zwykłym plikiem tekstowym. A im więcej będziesz dokonywał zmian, tym rzadziej plik będzie keszowany, do tego dochodzą różne warianty położenia graczy na mapie, więc pamięc keszująca szybko zostanie wyczerpana i tyle będzie z optymalizacji.

 

Co ostatecznie zrobić?

 

1) Jak Tymon napisał - obsługiwać plik binarnie a nie czysto tekstowo. Jednakże to też nie jest szybkie rozwiązanie.

2) Najlepszym wyjściem będzie postawienie serwera memcached (prosta baza klucz->wartość) gdzie będziesz trzymał całą mapę i okresowo zrzucał ją do pliku jako backup (bo memcached to "pamięć ulotna"). Wtedy wydajność Twojej aplikacji wzrośnie "masakrycznie" przy większej liczbie równoległych połączeń.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...