• Crossplatform
– Browser, Android, Ios
• Echtzeit
– Das Spiel läuft unaufhörlich weiter
– Schnelle Information über Statusänderungen
• Multiplayer
– Spieler können einander beeinflussen
– Schnelle Information über Beeinflussungen
DB
DB
DB
Globaler Redis
Pub-Sub
Websocket vNodeJS Redis
Push-Pull
Webserver
PHP WorkerPHP WorkerPHP Worker
vNodeJS Redis
Push-Pull
Webserver
PHP WorkerPHP WorkerPHP Worker
Worker
Dispatcher Controller
Repository
Domain ObjekteDomain Service
Redis
Event
Dispatcher
Redis
DB Views
• Daemon
– Abarbeiten zeitgesteuerter Spielereignisse
– Arbeitet nicht selbst, erstellt Messages
• Cronjobs
– Werden über den Daemon abgehandelt
• Sockets ersetzen Sessions
• Zusätzliche Daten am Socket
– Connection ID, Player ID, Spielwelt, Etc.
– Gesetzt durch Messages von PHP
– Zusätzliche Indizes
• In Messages zwischen Node & PHP enthalten
– Node  PHP: alle am senden Socket gespeicherte Daten
– PHP  Node: eine Kombination der Daten auf die alle
verbundenen Sockets gematcht werden
• Weiterleitung passender Messages
– Interne Daten werden entfernt
• API-Test
– Beschreibung
– Eingehender Nachricht
– Ausgehende Nachrichten
• Basierend auf Fixtures
• Nur auf PHP-Ebene
• Rollback nach jedem Test
• Dienen gleichzeitig als Dokumentation
– Dokumentation ist zwangsweise immer aktuell

Softwarearchitektur eines modernen Onlinespieles - PHPUnconference 2013

  • 2.
    • Crossplatform – Browser,Android, Ios • Echtzeit – Das Spiel läuft unaufhörlich weiter – Schnelle Information über Statusänderungen • Multiplayer – Spieler können einander beeinflussen – Schnelle Information über Beeinflussungen
  • 3.
    DB DB DB Globaler Redis Pub-Sub Websocket vNodeJSRedis Push-Pull Webserver PHP WorkerPHP WorkerPHP Worker vNodeJS Redis Push-Pull Webserver PHP WorkerPHP WorkerPHP Worker
  • 4.
    Worker Dispatcher Controller Repository Domain ObjekteDomainService Redis Event Dispatcher Redis DB Views
  • 5.
    • Daemon – Abarbeitenzeitgesteuerter Spielereignisse – Arbeitet nicht selbst, erstellt Messages • Cronjobs – Werden über den Daemon abgehandelt
  • 6.
    • Sockets ersetzenSessions • Zusätzliche Daten am Socket – Connection ID, Player ID, Spielwelt, Etc. – Gesetzt durch Messages von PHP – Zusätzliche Indizes • In Messages zwischen Node & PHP enthalten – Node  PHP: alle am senden Socket gespeicherte Daten – PHP  Node: eine Kombination der Daten auf die alle verbundenen Sockets gematcht werden • Weiterleitung passender Messages – Interne Daten werden entfernt
  • 7.
    • API-Test – Beschreibung –Eingehender Nachricht – Ausgehende Nachrichten • Basierend auf Fixtures • Nur auf PHP-Ebene • Rollback nach jedem Test • Dienen gleichzeitig als Dokumentation – Dokumentation ist zwangsweise immer aktuell