PYCON DE 2012 - Echtzeit browsergames
-
Upload
bikeshedder -
Category
Technology
-
view
975 -
download
6
Embed Size (px)
description
Transcript of PYCON DE 2012 - Echtzeit browsergames

Kapitel 0 – Michael P. Jungwhoami
Thursday, 1. November 2012 [W]

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
Thursday, 1. November 2012 [W]

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]

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]

Kapitel 1 – KonzeptVon der Idee zum Spiel
Thursday, 1. November 2012 [W]

Foto von doom.wikia.comFotograf: Janzidreg
Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Kapitel 2 – Technikvon async bis zmq
Thursday, 1. November 2012 [W]

AnatomieWas gehört zu einem Browsergame?
Thursday, 1. November 2012 [W]

Datenbank
Browser
SoundsMusik
GFXGrafikenGame server Hub Server
MoMMessage oriented
Middleware
Missionen
SpielinhalteClient
Server
JavaScript Applikation Gegner
Waffen
Achievements
Thursday, 1. November 2012 [W]

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]

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]

Architektur
Browser
static.kodexgame.com
kodexgame.com
hub.kodexgame.com
gNNN.kodexgame.com
Database
MoM
Thursday, 1. November 2012 [W]

Opoge PusherNette Idee, aber leider etwas umständlich...
Thursday, 1. November 2012 [W]

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]

Deployment
Web Applikation
Browser
Opoge Pusher
Thursday, 1. November 2012 [W]

Ablauf
Browser WebApp Pusher
Login
Pusher Session
Login
Data
session.create
session.push
Thursday, 1. November 2012 [W]

Pro und Contra
Einfach zu verwenden
Kompatibel mit beliebigen Programmiersprachen
Sessions müssen doppelt verwaltet werden
Session-Pinning notwendig
Thursday, 1. November 2012 [W]

MushroomRealtime web messaging
Thursday, 1. November 2012 [W]

Designziele
Kein vollwertiger Dienst sondern ein Framework
Eingebautes RPC
Unterstützung von Message Queues
Thursday, 1. November 2012 [W]

Architektur
Server
Client
Long pollingCall WebSocket SSE*
*Server-sent eventsThursday, 1. November 2012 [W]

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]

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]

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]

Download
https://bitbucket.org/terreon/mushroom/
Thursday, 1. November 2012 [W]

Sync-ModelsSynchronisierte Objektgraphen
Thursday, 1. November 2012 [W]

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]

Zutaten
Django (optional)
“Simple JavaScript Inheritance” by John Resig
KnockoutJS
Thursday, 1. November 2012 [W]

Beispiel Graph
Root [0]
Root [0]
Server Client
Thursday, 1. November 2012 [W]

Beispiel Graph
Root [0]
Root [0]
Server Client
X
Thursday, 1. November 2012 [W]

Beispiel Graph
Root [0]
Root [0]
Server Client
X[1]
Thursday, 1. November 2012 [W]

Beispiel Graph
Root [0]
Root [0]
Server Client
X[1]
X[1]
push
Thursday, 1. November 2012 [W]

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]

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]

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]

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]

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]

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]

Protokoll(Delete)
{ “0”: { “messages*”: [4] }, “1”: null, “2”: null}
Thursday, 1. November 2012 [W]

Kapitel 3 – HostingWie hoste ich ein System dieser Art?
Thursday, 1. November 2012 [W]

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]

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]

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]

Kapitel 4 – MarketingPublisher, Social Marketing, P2P Propaganda
Thursday, 1. November 2012 [W]

Publisher
7 Games
BigPoint
Gameforge
Frogster
...
Keine Resonanz}Thursday, 1. November 2012 [W]

Social-Networks
Facebookhttp://kodexgame.com/facebook/
Google+http://kodexgame.com/google+/
Twitterhttp://kodexgame.com/twitter/
Thursday, 1. November 2012 [W]

P2P Propaganda
Registrierung für Closed-Betahttp://kodexgame.com/beta/
Thursday, 1. November 2012 [W]

Kapitel 5 – Geld verdienenBezahlmodelle und -systeme
Thursday, 1. November 2012 [W]

ZahlungsmodelleAbo, Free to play, Premium Items,...
Thursday, 1. November 2012 [W]

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]

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]

Pay what you want
Spieler bestimmen selbst was Sie für das Spiel bezahlen wollen.
Thursday, 1. November 2012 [W]

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]

Sponsored
... schön wär’s.
Thursday, 1. November 2012 [W]

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]

BezahlsystemePayPal, Amazon FPS, Google Checkout, Paymill, VirtualPiggy, Premium SMS,...
Thursday, 1. November 2012 [W]

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]

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]

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]

Bezahlsysteme (4/4)
Publisher bzw. Platform
Thursday, 1. November 2012 [W]

Kapitel 6 – Lessons learnedOooops...
Thursday, 1. November 2012 [W]

Lektion 1: Releases“When it’s done” = Flexible Releaseplanung
Thursday, 1. November 2012 [W]

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]

Lektion 2: JugendschutzUnterhaltungssoftware Selbstkontrolle
Thursday, 1. November 2012 [W]

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]

Lektion 3: Kein IEInternet Explorer? Nein Danke!
Thursday, 1. November 2012 [W]

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]

Lektion 4: NIHNot invented here
Thursday, 1. November 2012 [W]

Not invented here
Opoge Pusher
Dependency Injection
JavaScript Bundler
...
Thursday, 1. November 2012 [W]

Kapitel 7 – KODEXJoin the intergalactic scavenger hunt.
Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

Thursday, 1. November 2012 [W]

KODEX beta sign-up:http://kodexgame.com/beta/
Michael P. Jung <[email protected]>
Thursday, 1. November 2012 [W]