Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PYCON DE 2012 - Echtzeit browsergames

1,318 views

Published on

Folien von meinem Vortag "Echtzeit Browsergames" von der PYCON DE 2012 in Leipzig.

https://2012.de.pycon.org/programm/schedule/sessions/19/

Mit gevent und browserseitigem JavaScript können Mehrspieler Browsergames entwickelt werden, die Spielerinteraktionen in Echtzeit zulassen. Dieser Vortrag versucht Lust auf das Echtzeit Web zu machen und zeigt anhand eines konkreten Spieles (KODEX, http://kodexgame.com/) Lösungen für Entwicklung, Hosting und Vertrieb auf.
Der Vortrag beleuchtet neben den Implikationen des Realtime Web wie Caching, Scaling, Same-Origin-Policy und Cross-Origin-Resource-Sharing auch Strategien zur horizontalen Skalierbarkeit, oder: Wie löst man das C10K Problem?
Während NodeJS oft als die Lösung für Echtzeitanwendungen angepriesen wird, kommt hier auf der Serverseite gezielt Python mit gevent zum Einsatz.

Published in: Technology
  • Be the first to comment

PYCON DE 2012 - Echtzeit browsergames

  1. 1. Echtzeit Browsergames Michael P. Jung <me@bikeshedder.com>Thursday, 1. November 2012 [W]
  2. 2. Kapitel 0 – Michael P. Jung whoamiThursday, 1. November 2012 [W]
  3. 3. Michael P. Jung Software Engineer und Designer Softwareentwickler C, C++, Python, Java (uvm.) me@bikeshedder.com Linux Benutzer seit 1994 Python Entwickler seit Python 2.3, ~2003 Django Entwickler seit magic-removal branch, ~2006 BrettspielefanThursday, 1. November 2012 [W]
  4. 4. http://terreon.de/ Software und Design Gegründet: 2000 Echtzeit Client-Server-Anwendungen E-Commerce App-Developers (HTML5) Game DevelopersThursday, 1. November 2012 [W]
  5. 5. http://pyrox.eu/ Hosting Experts @pyrox_eu Gegründet: 2008 Python Shared Hosting Individuelle Hostinglösungen “The next big thing” (ETA 2013)Thursday, 1. November 2012 [W]
  6. 6. Kapitel 1 – Konzept Von der Idee zum SpielThursday, 1. November 2012 [W]
  7. 7. Foto von doom.wikia.com Fotograf: JanzidregThursday, 1. November 2012 [W]
  8. 8. Thursday, 1. November 2012 [W]
  9. 9. Thursday, 1. November 2012 [W]
  10. 10. Thursday, 1. November 2012 [W]
  11. 11. Thursday, 1. November 2012 [W]
  12. 12. Thursday, 1. November 2012 [W]
  13. 13. Thursday, 1. November 2012 [W]
  14. 14. Thursday, 1. November 2012 [W]
  15. 15. Thursday, 1. November 2012 [W]
  16. 16. Thursday, 1. November 2012 [W]
  17. 17. Thursday, 1. November 2012 [W]
  18. 18. Thursday, 1. November 2012 [W]
  19. 19. Kapitel 2 – Technik von async bis zmqThursday, 1. November 2012 [W]
  20. 20. Anatomie Was gehört zu einem Browsergame?Thursday, 1. November 2012 [W]
  21. 21. Client Spielinhalte Browser Waffen JavaScript Applikation Gegner Missionen Server Achievements Game server Hub Server Grafiken GFX MoM Datenbank Message oriented Middleware Musik SoundsThursday, 1. November 2012 [W]
  22. 22. Technologie Stack (Server) Python 2.7 PostgreSQL http://python.org/ http://www.postgresql.org/ Django RabbitMQ http://www.djangoproject.com/ http://www.rabbitmq.com/ Django Socialauth Mushroom https://github.com/omab/django- https://bitbucket.org/terreon/ social-auth mushroom gevent Sync Models http://gevent.org/ https://bitbucket.org/terreon/sync- models (noch nicht released)Thursday, 1. November 2012 [W]
  23. 23. Technologie Stack (Client) JQuery Sync Models http://jquery.com/ https://bitbucket.org/terreon/sync- models (noch nicht released) Knockout http://knockoutjs.com/ Compass http://compass-style.org/ Sugar http://sugarjs.com/ Mushroom https://bitbucket.org/terreon/ mushroomThursday, 1. November 2012 [W]
  24. 24. Architektur static.kodexgame.com Database kodexgame.com Browser hub.kodexgame.com MoM gNNN.kodexgame.comThursday, 1. November 2012 [W]
  25. 25. Opoge Pusher Nette Idee, aber leider etwas umständlich...Thursday, 1. November 2012 [W]
  26. 26. 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]
  27. 27. Deployment Browser Web Applikation Opoge PusherThursday, 1. November 2012 [W]
  28. 28. Ablauf Browser WebApp Pusher Login session.create Pusher Session Login session.push DataThursday, 1. November 2012 [W]
  29. 29. Pro und Contra Einfach zu verwenden Kompatibel mit beliebigen Programmiersprachen Sessions müssen doppelt verwaltet werden Session-Pinning notwendigThursday, 1. November 2012 [W]
  30. 30. Mushroom Realtime web messagingThursday, 1. November 2012 [W]
  31. 31. Designziele Kein vollwertiger Dienst sondern ein Framework Eingebautes RPC Unterstützung von Message QueuesThursday, 1. November 2012 [W]
  32. 32. Architektur Server Call Long polling WebSocket SSE* Client *Server-sent eventsThursday, 1. November 2012 [W]
  33. 33. 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]
  34. 34. 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]
  35. 35. 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]
  36. 36. Download https://bitbucket.org/terreon/mushroom/Thursday, 1. November 2012 [W]
  37. 37. Sync-Models Synchronisierte ObjektgraphenThursday, 1. November 2012 [W]
  38. 38. Grundidee Server Objektgraphen synchronisieren Änderungen vom von Server zum Client pushen (z.B. via Mushroom) Push!!!11one Jedes Objekt erhält eine eindeutige Objekt ID Sobald ein Objekt Teil des Graphs wird werden Änderungen automatisch übertragen. ClientThursday, 1. November 2012 [W]
  39. 39. Zutaten Django (optional) “Simple JavaScript Inheritance” by John Resig KnockoutJSThursday, 1. November 2012 [W]
  40. 40. Beispiel Graph Server Client Root Root [0] [0]Thursday, 1. November 2012 [W]
  41. 41. Beispiel Graph Server Client Root Root [0] [0] XThursday, 1. November 2012 [W]
  42. 42. Beispiel Graph Server Client Root Root [0] [0] X [1]Thursday, 1. November 2012 [W]
  43. 43. Beispiel Graph Server Client Root Root [0] [0] X push X [1] [1]Thursday, 1. November 2012 [W]
  44. 44. 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]
  45. 45. 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]
  46. 46. 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]
  47. 47. 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]
  48. 48. { “0”: { Protokoll “class”: “bb.BulletinBoard”, (Snapshot) “messages*”: [1] }, “1”: { “class”: “bb.Message”, “user*”: 2, “text”: “Was rockt?” }, “2”: { “class”: “auth.User”, “username”: “bikeshedder” } }Thursday, 1. November 2012 [W]
  49. 49. { “0”: { Protokoll “messages*”: [2, 4] (Update) }, “4”: { “class”: “bb.Message”, “user*”: 5, “text”: “PYCON DE 2012” }, “5”: { “class”: “auth.User”, “username”: “solid” } }Thursday, 1. November 2012 [W]
  50. 50. Protokoll (Delete) { “0”: { “messages*”: [4] }, “1”: null, “2”: null }Thursday, 1. November 2012 [W]
  51. 51. Kapitel 3 – Hosting Wie hoste ich ein System dieser Art?Thursday, 1. November 2012 [W]
  52. 52. 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änktThursday, 1. November 2012 [W]
  53. 53. Heroku Beliebt unter Entwicklern Serverstandort nur in USA Push-Dienst muss zusätzlich gebucht werden (z.B. Pusher oder PubNub) Lokale Entwicklung eingeschränktThursday, 1. November 2012 [W]
  54. 54. Eigene Server virtuell oder physikalisch Server müssen gewartet werden Maximale Flexibilität Software läuft sowohl lokal als auch remote Kein Vendor Lock-inThursday, 1. November 2012 [W]
  55. 55. Kapitel 4 – Marketing Publisher, Social Marketing, P2P PropagandaThursday, 1. November 2012 [W]
  56. 56. Publisher } 7 Games BigPoint Gameforge Keine Resonanz Frogster ...Thursday, 1. November 2012 [W]
  57. 57. Social-Networks Facebook http://kodexgame.com/facebook/ Google+ http://kodexgame.com/google+/ Twitter http://kodexgame.com/twitter/Thursday, 1. November 2012 [W]
  58. 58. P2P Propaganda Registrierung für Closed-Beta http://kodexgame.com/beta/Thursday, 1. November 2012 [W]
  59. 59. Kapitel 5 – Geld verdienen Bezahlmodelle und -systemeThursday, 1. November 2012 [W]
  60. 60. Zahlungsmodelle Abo, Free to play, Premium Items,...Thursday, 1. November 2012 [W]
  61. 61. 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]
  62. 62. 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]
  63. 63. Pay what you want Spieler bestimmen selbst was Sie für das Spiel bezahlen wollen.Thursday, 1. November 2012 [W]
  64. 64. 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]
  65. 65. Sponsored ... schön wär’s.Thursday, 1. November 2012 [W]
  66. 66. Zahlungsmodell – Fazit Free to play ist Pflicht. Spielbalance sollte nicht darunter leiden. Unkritisch: Spielzeit einschränken Spielinhalte verkaufen optische IndividualisierungThursday, 1. November 2012 [W]
  67. 67. Bezahlsysteme PayPal, Amazon FPS, Google Checkout, Paymill, VirtualPiggy, Premium SMS,...Thursday, 1. November 2012 [W]
  68. 68. 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]
  69. 69. Bezahlsysteme (2/4) Paymill: 0,28 € + 2,95% VISA und MasterCard https://www.paymill.de/ Fortumo: 45% – 60% Premium SMS http://fortumo.com/ Sofortüberweisung: 0,25 € + 0,9% ...mit Abo (4,90 €/Monat): 0,10 € + 0,85%Thursday, 1. November 2012 [W]
  70. 70. Bezahlsysteme (3/4) VirtualPiggy Payment Lösung für Kinder und Jugendliche http://virtualpiggy.com/ Pay by Call T-Pay wurde 2010 eingestellt DaoPay: Gebühren nicht öffentlich paysafecard: 15% - 17%Thursday, 1. November 2012 [W]
  71. 71. Bezahlsysteme (4/4) Publisher bzw. PlatformThursday, 1. November 2012 [W]
  72. 72. Kapitel 6 – Lessons learned Oooops...Thursday, 1. November 2012 [W]
  73. 73. Lektion 1: Releases “When it’s done” = Flexible ReleaseplanungThursday, 1. November 2012 [W]
  74. 74. 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]
  75. 75. Lektion 2: Jugendschutz Unterhaltungssoftware SelbstkontrolleThursday, 1. November 2012 [W]
  76. 76. 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 EUR Jahresmitgliedschaft: 3.000 EUR + Prüfgremium + X Jugendschutzlabel empfehlenswert: /age-de.xml im Root-Verzeichnis der Domain ablegenThursday, 1. November 2012 [W]
  77. 77. Lektion 3: Kein IE Internet Explorer? Nein Danke!Thursday, 1. November 2012 [W]
  78. 78. 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]
  79. 79. Lektion 4: NIH Not invented hereThursday, 1. November 2012 [W]
  80. 80. Not invented here Opoge Pusher Dependency Injection JavaScript Bundler ...Thursday, 1. November 2012 [W]
  81. 81. Kapitel 7 – KODEX Join the intergalactic scavenger hunt.Thursday, 1. November 2012 [W]
  82. 82. Thursday, 1. November 2012 [W]
  83. 83. Thursday, 1. November 2012 [W]
  84. 84. Thursday, 1. November 2012 [W]
  85. 85. Thursday, 1. November 2012 [W]
  86. 86. Thursday, 1. November 2012 [W]
  87. 87. Thursday, 1. November 2012 [W]
  88. 88. Thursday, 1. November 2012 [W]
  89. 89. Thursday, 1. November 2012 [W]
  90. 90. Thursday, 1. November 2012 [W]
  91. 91. Thursday, 1. November 2012 [W]
  92. 92. Thursday, 1. November 2012 [W]
  93. 93. Thursday, 1. November 2012 [W]
  94. 94. Thursday, 1. November 2012 [W]
  95. 95. Thursday, 1. November 2012 [W]
  96. 96. Thursday, 1. November 2012 [W]
  97. 97. Thursday, 1. November 2012 [W]
  98. 98. Thursday, 1. November 2012 [W]
  99. 99. Michael P. Jung <me@bikeshedder.com> KODEX beta sign-up: http://kodexgame.com/beta/Thursday, 1. November 2012 [W]

×