Download - PYCON DE 2012 - Echtzeit browsergames

Transcript
Page 1: PYCON DE 2012 - Echtzeit browsergames

Echtzeit BrowsergamesMichael P. Jung <[email protected]>

Thursday, 1. November 2012 [W]

Page 2: PYCON DE 2012 - Echtzeit browsergames

Kapitel 0 – Michael P. Jungwhoami

Thursday, 1. November 2012 [W]

Page 3: PYCON DE 2012 - Echtzeit browsergames

Michael P. JungSoftware Engineer und Designer

SoftwareentwicklerC, C++, Python, Java (uvm.)

Linux Benutzerseit 1994

Python Entwicklerseit Python 2.3, ~2003

Django Entwicklerseit magic-removal branch, ~2006

Brettspielefan

[email protected]

Thursday, 1. November 2012 [W]

Page 4: PYCON DE 2012 - Echtzeit browsergames

Gegründet: 2000

Echtzeit Client-Server-Anwendungen

E-Commerce

App-Developers (HTML5)

Game Developers

http://terreon.de/Software und Design

Thursday, 1. November 2012 [W]

Page 5: PYCON DE 2012 - Echtzeit browsergames

Gegründet: 2008

Python Shared Hosting

Individuelle Hostinglösungen

“The next big thing” (ETA 2013)

http://pyrox.eu/@pyrox_euHosting Experts

Thursday, 1. November 2012 [W]

Page 6: PYCON DE 2012 - Echtzeit browsergames

Kapitel 1 – KonzeptVon der Idee zum Spiel

Thursday, 1. November 2012 [W]

Page 7: PYCON DE 2012 - Echtzeit browsergames

Foto von doom.wikia.comFotograf: Janzidreg

Thursday, 1. November 2012 [W]

Page 8: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 9: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 10: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 11: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 12: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 13: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 14: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 15: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 16: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 17: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 18: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 19: PYCON DE 2012 - Echtzeit browsergames

Kapitel 2 – Technikvon async bis zmq

Thursday, 1. November 2012 [W]

Page 20: PYCON DE 2012 - Echtzeit browsergames

AnatomieWas gehört zu einem Browsergame?

Thursday, 1. November 2012 [W]

Page 21: PYCON DE 2012 - Echtzeit browsergames

Datenbank

Browser

SoundsMusik

GFXGrafikenGame server Hub Server

MoMMessage oriented

Middleware

Missionen

SpielinhalteClient

Server

JavaScript Applikation Gegner

Waffen

Achievements

Thursday, 1. November 2012 [W]

Page 22: PYCON DE 2012 - Echtzeit browsergames

Technologie Stack (Server)

Python 2.7http://python.org/

Djangohttp://www.djangoproject.com/

Django Socialauthhttps://github.com/omab/django-social-auth

geventhttp://gevent.org/

PostgreSQLhttp://www.postgresql.org/

RabbitMQhttp://www.rabbitmq.com/

Mushroomhttps://bitbucket.org/terreon/mushroom

Sync Modelshttps://bitbucket.org/terreon/sync-models (noch nicht released)

Thursday, 1. November 2012 [W]

Page 23: PYCON DE 2012 - Echtzeit browsergames

Technologie Stack (Client)

JQueryhttp://jquery.com/

Knockouthttp://knockoutjs.com/

Sugarhttp://sugarjs.com/

Mushroomhttps://bitbucket.org/terreon/mushroom

Sync Modelshttps://bitbucket.org/terreon/sync-models (noch nicht released)

Compasshttp://compass-style.org/

Thursday, 1. November 2012 [W]

Page 24: PYCON DE 2012 - Echtzeit browsergames

Architektur

Browser

static.kodexgame.com

kodexgame.com

hub.kodexgame.com

gNNN.kodexgame.com

Database

MoM

Thursday, 1. November 2012 [W]

Page 25: PYCON DE 2012 - Echtzeit browsergames

Opoge PusherNette Idee, aber leider etwas umständlich...

Thursday, 1. November 2012 [W]

Page 26: PYCON DE 2012 - Echtzeit browsergames

Opoge Pusher

Publish-Subscribe Dienst

Keine Permissions

Senden von Nachrichten und Steuern der Subscribe ausschließlich über Kontrollkanal

https://bitbucket.org/bikeshedder/opoge-pusher/

Thursday, 1. November 2012 [W]

Page 27: PYCON DE 2012 - Echtzeit browsergames

Deployment

Web Applikation

Browser

Opoge Pusher

Thursday, 1. November 2012 [W]

Page 28: PYCON DE 2012 - Echtzeit browsergames

Ablauf

Browser WebApp Pusher

Login

Pusher Session

Login

Data

session.create

session.push

Thursday, 1. November 2012 [W]

Page 29: PYCON DE 2012 - Echtzeit browsergames

Pro und Contra

Einfach zu verwenden

Kompatibel mit beliebigen Programmiersprachen

Sessions müssen doppelt verwaltet werden

Session-Pinning notwendig

Thursday, 1. November 2012 [W]

Page 30: PYCON DE 2012 - Echtzeit browsergames

MushroomRealtime web messaging

Thursday, 1. November 2012 [W]

Page 31: PYCON DE 2012 - Echtzeit browsergames

Designziele

Kein vollwertiger Dienst sondern ein Framework

Eingebautes RPC

Unterstützung von Message Queues

Thursday, 1. November 2012 [W]

Page 32: PYCON DE 2012 - Echtzeit browsergames

Architektur

Server

Client

Long pollingCall WebSocket SSE*

*Server-sent eventsThursday, 1. November 2012 [W]

Page 33: PYCON DE 2012 - Echtzeit browsergames

Mushroom Server (1/2)

class GameServer(object):

def __init__(self, listener): self.server = mushroom.Server(listener, mushroom.MethodDispatcher(self, ‘rpc_’)) self.mom = mushroom.messaging.Client( settings.BROKER_URL, exchange, queue, mushroom.MethodDispatcher(self, ‘mom_’))

Thursday, 1. November 2012 [W]

Page 34: PYCON DE 2012 - Echtzeit browsergames

Mushroom Server (2/2)

class ChatServer(object):

(...)

def mom_message(self, request): self.server.sessions.notify(‘message’, request.data)

def rpc_message(self, request): self.mom.notify(‘message’, request.data)

Thursday, 1. November 2012 [W]

Page 35: PYCON DE 2012 - Echtzeit browsergames

Mushroom Client

var client = new mushroom.Client({ url: SERVER_URL});client.method.method(function(request) { console.log(request.data);});function sendMessage(text) { client.notify(‘message’, { text: text })}

Thursday, 1. November 2012 [W]

Page 36: PYCON DE 2012 - Echtzeit browsergames

Download

https://bitbucket.org/terreon/mushroom/

Thursday, 1. November 2012 [W]

Page 37: PYCON DE 2012 - Echtzeit browsergames

Sync-ModelsSynchronisierte Objektgraphen

Thursday, 1. November 2012 [W]

Page 38: PYCON DE 2012 - Echtzeit browsergames

Grundidee

Objektgraphen synchronisieren

Änderungen vom von Server zum Client pushen (z.B. via Mushroom)

Jedes Objekt erhält eine eindeutige Objekt ID

Sobald ein Objekt Teil des Graphs wird werden Änderungen automatisch übertragen.

Server

Client

Push!!!11one

Thursday, 1. November 2012 [W]

Page 39: PYCON DE 2012 - Echtzeit browsergames

Zutaten

Django (optional)

“Simple JavaScript Inheritance” by John Resig

KnockoutJS

Thursday, 1. November 2012 [W]

Page 40: PYCON DE 2012 - Echtzeit browsergames

Beispiel Graph

Root [0]

Root [0]

Server Client

Thursday, 1. November 2012 [W]

Page 41: PYCON DE 2012 - Echtzeit browsergames

Beispiel Graph

Root [0]

Root [0]

Server Client

X

Thursday, 1. November 2012 [W]

Page 42: PYCON DE 2012 - Echtzeit browsergames

Beispiel Graph

Root [0]

Root [0]

Server Client

X[1]

Thursday, 1. November 2012 [W]

Page 43: PYCON DE 2012 - Echtzeit browsergames

Beispiel Graph

Root [0]

Root [0]

Server Client

X[1]

X[1]

push

Thursday, 1. November 2012 [W]

Page 44: PYCON DE 2012 - Echtzeit browsergames

Server

from kodex.sync import models

class BulletinBoard(models.RootModel): messages = models.ReferenceListField()

class Message(models.Model): user = models.ReferenceField() text = models.StringField()

Thursday, 1. November 2012 [W]

Page 45: PYCON DE 2012 - Echtzeit browsergames

Server

from kodex.sync import server

class Server(server.SyncServer):

def __init__(self): self.root = BulletinBoard()

def post(message): self.root.messages.append(message)

Thursday, 1. November 2012 [W]

Page 46: PYCON DE 2012 - Echtzeit browsergames

Client

bb.Client = kodex.sync.Client.extend({ post: function(text) { this.request(‘post’, { text: text }) }})

var client = new bb.Client();$(‘#bb’).koApplyBindings(client);

Thursday, 1. November 2012 [W]

Page 47: PYCON DE 2012 - Echtzeit browsergames

Client<div id=”bb”> <ul class=”messages” data-bind=” foreach: root().messages”> <li> <span class=”user” data-bind=” text: user”></span>: <span class=”text” data-bind=” text: user”></span> </li> </ul></div>

Thursday, 1. November 2012 [W]

Page 48: PYCON DE 2012 - Echtzeit browsergames

Protokoll(Snapshot)

{ “0”: { “class”: “bb.BulletinBoard”, “messages*”: [1] }, “1”: { “class”: “bb.Message”, “user*”: 2, “text”: “Was rockt?” }, “2”: { “class”: “auth.User”, “username”: “bikeshedder” }}

Thursday, 1. November 2012 [W]

Page 49: PYCON DE 2012 - Echtzeit browsergames

Protokoll(Update)

{ “0”: { “messages*”: [2, 4] }, “4”: { “class”: “bb.Message”, “user*”: 5, “text”: “PYCON DE 2012” }, “5”: { “class”: “auth.User”, “username”: “solid” }}

Thursday, 1. November 2012 [W]

Page 50: PYCON DE 2012 - Echtzeit browsergames

Protokoll(Delete)

{ “0”: { “messages*”: [4] }, “1”: null, “2”: null}

Thursday, 1. November 2012 [W]

Page 51: PYCON DE 2012 - Echtzeit browsergames

Kapitel 3 – HostingWie hoste ich ein System dieser Art?

Thursday, 1. November 2012 [W]

Page 52: PYCON DE 2012 - Echtzeit browsergames

Google Appengine

Asynchrone Kommunikation mit dem Client nur über die Channel API möglich.

Stateful Services umständlich

Verhältnismäßig teuer

Wartungsfrei

Lokale Entwicklung eingeschränkt

Thursday, 1. November 2012 [W]

Page 53: PYCON DE 2012 - Echtzeit browsergames

Heroku

Beliebt unter Entwicklern

Serverstandort nur in USA

Push-Dienst muss zusätzlich gebucht werden (z.B. Pusher oder PubNub)

Lokale Entwicklung eingeschränkt

Thursday, 1. November 2012 [W]

Page 54: PYCON DE 2012 - Echtzeit browsergames

Eigene Servervirtuell oder physikalisch

Server müssen gewartet werden

Maximale Flexibilität

Software läuft sowohl lokal als auch remote

Kein Vendor Lock-in

Thursday, 1. November 2012 [W]

Page 55: PYCON DE 2012 - Echtzeit browsergames

Kapitel 4 – MarketingPublisher, Social Marketing, P2P Propaganda

Thursday, 1. November 2012 [W]

Page 56: PYCON DE 2012 - Echtzeit browsergames

Publisher

7 Games

BigPoint

Gameforge

Frogster

...

Keine Resonanz}Thursday, 1. November 2012 [W]

Page 57: PYCON DE 2012 - Echtzeit browsergames

Social-Networks

Facebookhttp://kodexgame.com/facebook/

Google+http://kodexgame.com/google+/

Twitterhttp://kodexgame.com/twitter/

Thursday, 1. November 2012 [W]

Page 58: PYCON DE 2012 - Echtzeit browsergames

P2P Propaganda

Registrierung für Closed-Betahttp://kodexgame.com/beta/

Thursday, 1. November 2012 [W]

Page 59: PYCON DE 2012 - Echtzeit browsergames

Kapitel 5 – Geld verdienenBezahlmodelle und -systeme

Thursday, 1. November 2012 [W]

Page 60: PYCON DE 2012 - Echtzeit browsergames

ZahlungsmodelleAbo, Free to play, Premium Items,...

Thursday, 1. November 2012 [W]

Page 61: PYCON DE 2012 - Echtzeit browsergames

Abo (Subscription)

World of Warcraft hatte zeitweise bis zu 12 Millionen Abonnenten.

Neue “Stammspiele” lassen sich schwer etablieren.

Für kleinere Indie- oder Casualgames kein brauchbares Zahlungsmodell.

Thursday, 1. November 2012 [W]

Page 62: PYCON DE 2012 - Echtzeit browsergames

Free to play

Große Teile des Spiels sind spielbar aber bestimmte Inhalte und/oder die Spielzeit sind eingeschränkt.

Premium Items können gegen Geld gekauft werden.

Die Anzahl der Spielzüge ist begrenzt und kann durch Einsatz von Geld wieder aufgefüllt werden.

Thursday, 1. November 2012 [W]

Page 63: PYCON DE 2012 - Echtzeit browsergames

Pay what you want

Spieler bestimmen selbst was Sie für das Spiel bezahlen wollen.

Thursday, 1. November 2012 [W]

Page 64: PYCON DE 2012 - Echtzeit browsergames

Werbefinanziert

Kann große Teile der Spielatmosphäre zerstören

Spieler können gegen ein Entgelt die Werbung entfernen lassen.

Thursday, 1. November 2012 [W]

Page 65: PYCON DE 2012 - Echtzeit browsergames

Sponsored

... schön wär’s.

Thursday, 1. November 2012 [W]

Page 66: PYCON DE 2012 - Echtzeit browsergames

Zahlungsmodell – Fazit

Free to play ist Pflicht.

Spielbalance sollte nicht darunter leiden.

Unkritisch:

Spielzeit einschränken

Spielinhalte verkaufen

optische Individualisierung

Thursday, 1. November 2012 [W]

Page 67: PYCON DE 2012 - Echtzeit browsergames

BezahlsystemePayPal, Amazon FPS, Google Checkout, Paymill, VirtualPiggy, Premium SMS,...

Thursday, 1. November 2012 [W]

Page 68: PYCON DE 2012 - Echtzeit browsergames

Bezahlsysteme (1/4)

PayPal: 0,35 € + 1,9% (non-EU teurer)PayPal Micropayment: 10 Cent + 10%

Google Checkout: 0,20 £ + 3,4% (gestaffelt bis 1,4%)

Amazon FPS (>10 $): 0,30 $ + 2,9%Amazon FPS (> 0,05 $): 0,05 $ + 5%Amazon FPS (<0,05 $): 20%

ClickandBuy: 0,35 € + ~4%

Thursday, 1. November 2012 [W]

Page 69: PYCON DE 2012 - Echtzeit browsergames

Bezahlsysteme (2/4)

Paymill: 0,28 € + 2,95%VISA und MasterCardhttps://www.paymill.de/

Fortumo: 45% – 60%Premium SMShttp://fortumo.com/

Sofortüberweisung: 0,25 € + 0,9%...mit Abo (4,90 €/Monat): 0,10 € + 0,85%

Thursday, 1. November 2012 [W]

Page 70: PYCON DE 2012 - Echtzeit browsergames

Bezahlsysteme (3/4)

VirtualPiggyPayment Lösung für Kinder und Jugendlichehttp://virtualpiggy.com/

Pay by CallT-Pay wurde 2010 eingestelltDaoPay: Gebühren nicht öffentlich

paysafecard: 15% - 17%

Thursday, 1. November 2012 [W]

Page 71: PYCON DE 2012 - Echtzeit browsergames

Bezahlsysteme (4/4)

Publisher bzw. Platform

Thursday, 1. November 2012 [W]

Page 72: PYCON DE 2012 - Echtzeit browsergames

Kapitel 6 – Lessons learnedOooops...

Thursday, 1. November 2012 [W]

Page 73: PYCON DE 2012 - Echtzeit browsergames

Lektion 1: Releases“When it’s done” = Flexible Releaseplanung

Thursday, 1. November 2012 [W]

Page 74: PYCON DE 2012 - Echtzeit browsergames

Releases

Closed Beta – 1. April 2012

Closed Beta – 4. Juni 2012 (DjangoCon Europe)

Closed Beta – 15. August 2012 (gamescom)

Closed Beta – 30. Oktober 2012 (PYCON DE)

Closed Beta – 1. Januar 2013 (*sigh*)

Thursday, 1. November 2012 [W]

Page 75: PYCON DE 2012 - Echtzeit browsergames

Lektion 2: JugendschutzUnterhaltungssoftware Selbstkontrolle

Thursday, 1. November 2012 [W]

Page 76: PYCON DE 2012 - Echtzeit browsergames

Jugendschutz

Nur Spiele, die auf einem Speichermedium vertrieben werden müssen von der USK geprüft werden.

Browsergames können optional geprüft werden.Einmalige Prüfung: 300 EURJahresmitgliedschaft: 3.000 EUR + Prüfgremium + X

Jugendschutzlabel empfehlenswert:/age-de.xml im Root-Verzeichnis der Domain ablegen

Thursday, 1. November 2012 [W]

Page 77: PYCON DE 2012 - Echtzeit browsergames

Lektion 3: Kein IEInternet Explorer? Nein Danke!

Thursday, 1. November 2012 [W]

Page 78: PYCON DE 2012 - Echtzeit browsergames

Kein Internet Explorer

Verwendung von Chrome Frames:https://developers.google.com/chrome/chrome-frame/

Akzeptanz für Spiele mit Browser-Plugins ist merklich gestiegen. Chrome Frame ist in wenigen Minuten installiert und sofort einsatzbereit.

Anwender mit Internet Explorer und ohne Chrome Frame werden ignoriert.

Thursday, 1. November 2012 [W]

Page 79: PYCON DE 2012 - Echtzeit browsergames

Lektion 4: NIHNot invented here

Thursday, 1. November 2012 [W]

Page 80: PYCON DE 2012 - Echtzeit browsergames

Not invented here

Opoge Pusher

Dependency Injection

JavaScript Bundler

...

Thursday, 1. November 2012 [W]

Page 81: PYCON DE 2012 - Echtzeit browsergames

Kapitel 7 – KODEXJoin the intergalactic scavenger hunt.

Thursday, 1. November 2012 [W]

Page 82: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 83: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 84: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 85: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 86: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 87: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 88: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 89: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 90: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 91: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 92: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 93: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 94: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 95: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 96: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 97: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 98: PYCON DE 2012 - Echtzeit browsergames

Thursday, 1. November 2012 [W]

Page 99: PYCON DE 2012 - Echtzeit browsergames

KODEX beta sign-up:http://kodexgame.com/beta/

Michael P. Jung <[email protected]>

Thursday, 1. November 2012 [W]