Programmdesign - Event eines Clients an viele weitergeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Programmdesign - Event eines Clients an viele weitergeben

    Ich baue derzeit ein Browsergame (jaja ich weiß; gibt viel zu viele, blabla, ich machs halt trotzdem weil ich was lernen will) auf und in diesem Zuge fällt mir so langsam auf, dass ich bald Probleme kriegen werde.

    Nämlich dann, wenn ich die Aktionen eines Spielers auf den Bildschirmen der anderen Spieler anzeigen lassen will.

    Stellt euch am besten eine große Karte vor, auf denen die Spieler Figuren hin und her ziehen können (also kein "klassisches" Browsergame mit Tabellen, etc)

    Prinzipiell soll es natürlich so ablaufen, dass

    1. A möchte Aktion 1 ausführen -> Request an den Server: Aktion ausführen
    2. Server überprüft, ob A die Aktion ausführen darf, tut dies entsprechend oder verweigert die Aktion
    3. Server verteilt, wenn die Aktion erfolgreich war, die Aktion an alle am Spiel teilnehmden Clients
    4. A erhält die Antwort vom Server -> die Aktion wir auf dem Bildschirm ausgeführt (mit JavaScript z. B. eine Figur bewegt, whatever) oder eine Fehlermeldung erscheint
    5. Zeitgleich wird die Aktion (bei Erfolg) auf allen angeschlossenen Clients ausgeführt.

    Wie daraus ersichtlich wird, möchte ich eine Art Echtzeitspiel bauen, natürlich nur Pseudoechtzeit, aber prinzipiell in diese Richtung.

    Woran ich scheitere, ist Punkt 3. Da ich das Spiel ausschließlich auf PHP/MySQL/jQuery aufbauen möchte, damit man es sich ohne Probleme auf einem beliebigen Webhoster installieren kann, kommen andere Technologien nicht in Frage.

    Wie aber realisiere ich mit diesen Sprachen einen Server-Push? PHP kann dies meines Wissens nach nicht.

    Und wenn ich es mit periodischen Requests aller Clients (z. B. jede Sekunde) mache; wie müsste man ein solches Update gestalten, damit jeder Client immer alle Aktionen der anderen mitbekommt?

    Stehe etwas auf dem Schlauch, hoffe jemand hat Anregungen oder vielleicht weiterführende Literatur...
    This is what happens when an unstoppable force meets an immovable object.

  • #2
    Es gibt diverse Techniken dafür: Websockets, Comet, BOSH, long-polling ...
    Zuletzt geändert von onemorenerd; 07.07.2011, 09:13.

    Kommentar


    • #3
      Die Techniken habe ich mir alle schon angeschaut, aber keine davon scheint so wirklich für Apache/PHP geeignet zu sein.

      Bei Long Polling werden irgendwann alle Threads zugemüllt, Comet ist nur ein Oberbegriff und keine richtige Technik, WebSockets laufen nur mit WebKit oder FF 4+...
      This is what happens when an unstoppable force meets an immovable object.

      Kommentar


      • #4
        Zitat von ApoY2k Beitrag anzeigen
        Die Techniken habe ich mir alle schon angeschaut, aber keine davon scheint so wirklich für Apache/PHP geeignet zu sein.
        Vielleicht sind auch Apache und/oder PHP für dein Vorhaben nicht so wirklich geeignet ...
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Ja das stimmt wohl...

          Ich hatte wohl gehofft es gäb ne Möglichkeit periodische Reqeusts zu vermeiden.


          PS: Ist mir klar, dass man für sowas eigtl andere Techniken nutzen sollte, nur war mein Plan wie schon erwähnt, das ganze auf jedem 08/15-Webhoster lauffähig zu kriegen

          In dem Fall - habe mich schon etwas in Node.JS eingelesen, denn dafür gibt es das tolle Programm Socket.IO - muss "nur" noch eine Bridge zwischen den beiden her...
          Zuletzt geändert von ApoY2k; 07.07.2011, 10:26.
          This is what happens when an unstoppable force meets an immovable object.

          Kommentar

          Lädt...
          X