Serving Flash

Transcrição

Serving Flash
Serving Flash
Lösungen mit und ohne Java
Michel Wacker - Liip AG
Internet Briefing RIA Konferenz
Java? – HILFE!
Alles gar nicht so schlimm…
Darum gehts:

KEIN Java Code!

Überblick gewinnen

Grundlagen verstehen

Einstieg finden

Ein wenig Nähkästchen
Gedanken

Online Konferenzen

Multiplayer Online Spiele

Viele Benutzer

Intensive Interaktion

Dichte Kommunikation

Vielschichtiger Datenaustausch
Zutaten

Datenabfragen (data pull)

Message invocation (data push)

Zustände speichern

Streaming
Wie kriegen wir das?
Rezepte

Datenabfragen (data pull)


Message invocation (data push)


Persistente Verbindung
Zustände speichern


Flash Remoting (RPC)
Shared Objects
Streaming

Downstream: HTTP

Broadcast: Persistente Verbindung
Bahnhof?
Nicht so schlimm!
HILFE NAHT!
Remoting
Was ist Remoting?

Daten auf Anfrage

Aufruf externer Funktionen

Remote Procedure Call (RPC)

Eindirektionaler Aufruf Client  Server / Service
Flashangebot:


ActionScript 1 & 2
−
LoadVars
−
XMLSocket
ActionScript 3
−
URLLoader / Loader
−
XMLSocket
−
Socket
Etwas mau.
MEHR POWER!
Jenseits von LoadVars und Co.

XML-RPC

SOAP

AMF
XML-RPC und SOAP

XML-RPC Ursprung von SOAP

SOAP (W3C Standard)

XML zum encoden

HTTP zum senden

Hohe Verbreitung

Plaintext Codierung  viel Traffic

XML-Validierung zeitaufwändig
Viel interessanter:
AMF
Wikipedia empfiehlt:
A) Afghan Militia Force
B) Adios, Mother Fucker
– a mixed drink variant of the Long Island Iced Tea
C) Action Message Format
Bingo!
Action Message Format

SOAP basiert (Wrapper)

Messagebody als Binärdaten

ActionScript Object Interpretation

Bis zu 10x kleiner als pures XML

Protokoll: HTTP

AMF0 ab Flash Player 6

AMF3 auf AS3 optimiert (z.B. neue Datentypen)

Spezifikationen seit 13.12.2007 offen
AMF im Einsatz


PHP
−
AMFPHP
−
SabreAMF
Python
−

PyAMF
.NET
−
FlorineFX

Java
−
FMS
−
Red5
−
SmartFoxServer
−
Cinnamon
−
MilGra
−
BlazeDS
−
GraniteDS
AMF im Einsatz


PHP
−
AMFPHP
Java
−
Red5
−
SmartFoxServer
−
BlazeDS
AMFPHP

Kein Framework, kein “Server”

AMF - Implementation in PHP

Einbindung in bestehende Frameworks

Kommunikation ActionScript  PHP Objekte

Lizenz: GPL

Projektseite: www.amfphp.org
Zeit für ein Beispiel
Remoting Beispiel – PHP Service
<?php
// Datei 'HelloWorld.php'
class HelloWorld
{
public function say($sMessage)
{
return 'You said: ' . $sMessage;
}
}
?>
Remoting Beispiel – ActionScript
Package {
...
public class Main extends Sprite
{
private var gateway:String = "http://localhost/amfphp/gateway.php";
private var connection:NetConnection;
private var responder:Responder;
public function Main()
{
// Verbindungsaufbau zu Gateway
connection = new NetConnection();
connection.connect(gateway);
}
Remoting Beispiel – ActionScript
...
public function sendData():void
{
responder = new Responder(onResult, onFault);
// RPC ausführen
connection.call("HelloWorld.say", responder, "Remoting Example");
}
private function onResult(result:Object):void
{
trace(String(result)); // output: "You said: Remoting Example"
}
private function onFault(fault:Object):void
{
trace(String(fault.description));
}
Remoting – Rückblick

Oft ausreichend

Services out of the Box

AMFPHP
−
−
−
leicht integrierbar
etabliert
aktuell
Hervorragend für datenlastige Applikationen
Persistente Verbindungen
RTMP
RTMP

Real Time Messaging Protocol

Persistente TCP Verbindung

Message push
−
RPC auf Client (Message invoke)
−
Shared Object Synchronisierung

Video aufnehmen und senden (upstreaming)

U.U. schwerer zugänglich als HTTP  Tunneling
Shared Objects
Shared Objects

Zugriff durch Server und Client möglich

Beide lesen und schreiben

Lockere Kopplung

Polling  Refresh Latenz

Verwendung
−
−
Gruppe Clients teilen Informationen
Zustände speichern
Shared Objects

Message invoke (RPC) im Vergleich:
−
−
−
schneller
aufwändiger
harte Konventionen nötig
Der Allrounder
Red5
Red5 – Fakten

Ursprung: kostenfreie Alternative zu FMS

Einsatzschwerpunkt:
−
Großprojekte
−
Videolastige Anwendungen

Lizenz: LGPL

Aktuelle Version: 0.7.0 (23.02.2008)

Projektseite: http://osflash.org/red5
Red5 – Features

Audio/Video Streaming (FLV and MP3)

Client Stream Recording (FLV only)

Shared Objects

Live Stream Publishing

Remoting (AMF)
Red5 – Features

Scripting Support für JVM unterstützte Sprachen
−
−
JavaScript, JRuby, Jython, Groovy, Beanshell
ActionScript Support in Planung

LoadBalancing

Fertige Starterkits
Red5 – Probleme

Bislang keine Bücher

Einzige Ressourcen
−
−
−

Tutorials
Beispielapplikationen
Dokumentation
Tutorialsammlung:
www.red5tutorials.net/index.php/Main_Page
Red5 – Ausblick

h.264 streaming

RTMPE ?
Red5 – Ein Fallbeispiel
iconomix
Railgame
Railgame

Interaktives Multiplayer Modul auf iconomix

iconomix: Blended Learning Initiative der SNB

Einsatz in Schulen

Vermittlung von Wirtschaftsgrundlagen

Railgame: Arbeitsteilung und Handel

www.iconomix.ch/de/module/detail/m02/
Railgame – Beschreibung

Wettkampf um Streckennetz

Ungleiche Parteigewichtungen

Ungleiche Produktionszeiten

Geschickte Produktion

Produktion optimieren durch Handel

Spielverlauf steuerbar über Cockpit

Mehrsprachigkeit
Railgame – Demo
Railgame – Umsetzung

Iconomix Multiplayer Module:
−
−
Globale Login Lösung
Globale Event Handling Lösung

Schlauer Server – dummer Client

Konventionen für Objektstrukturen

Konventionen für Methoden
Railgame – Lessons learned

Kritisches Timing: Method invoke

Zustände: Shared Object

Pairprogramming

Pairdebugging
Für Spieleentwicklung
SmartFoxServer
SmartFoxServer – Fakten

Powered by gotoAndPlay: www.gotoandplay.it

Entwicklungsschwerpunkt: Spiele

Lizenz: gebührenpflichtig 

Aber: Testversion mit max 20 Verbindungen 

Projektseiten: www.smartfoxserver.com
SmartFoxServer – Features


ActionScript API
−
1.0, 2.0 und 3.0
−
Konzept: Zones – Rooms – Users
−
Optimiert für Spieleentwicklung
Serverextensions API
−
ActionScript 1.0 (ECMA-262), Python, Java
−
Templates
Entwicklung out-of-the-box
SmartFoxServer – Features

Hauseigene Tools
−
SmartFoxBits: optimierte Komponenten
−
BlueBox: Tunneling
−
RedBox: Audio-/Videostreaming mit Red5

AJAX API (beta)

Umfangreiche Dokumentation

Viele Tutorials
Für Flexer
BlazeDS
BlazeDS – Fakten

LiveCycle DataServices Auskopplung

Weniger Features

Einsatzschwerpunkte
−
Flex
−
AIR

Lizenz: LGPL 3.0

Projektseite:
http://opensource.adobe.com/wiki/display/blazeds/BlazeDS
BlazeDS – Features

Remoting Services
−


Methoden in Java-Objekten aufrufen
Messaging Services
−
Publish/Subscribe Infrastruktur
−
Echtzeit data push
Proxy Services
−
Sichere, kontrollierte cross-domain Anfragen
−
keine crossdomain.xml nötig
BlazeDS – Messaging


Komponenten
−
mx:Producer – senden
−
mx:Consumer – empfangen
−
destination=“channelName”
Kanal definieren
−
Externe messaging-config.xml
−
Streaming (persistente HTTP-Verbindung)
−
Polling (Intervalle)
BlazeDS – Messaging

Consumer Listening
−
message=“targetFunction(event.message) ”
−
explizite Anmeldung: subscribe()
BlazeDS – Messaging
// Geliehen von Flex cookbook beta
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=7765
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="consumer.subscribe()">
… // Anmerkung: der Messaging-Channel „chat“ wird in einer externen Datei „messaging-config.xml“ definiert.
<mx:Producer id="producer" destination="chat"/>
<mx:Consumer id="consumer" destination="chat"
message="messageHandler(event.message)"/>
…
<mx:TextInput id="msg" width="100%" enter="send()"/>
<mx:Button label="Send" click="send()"/>
… </mx:Application>
BlazeDS – Messaging
… <mx:Script>
<![CDATA[
import mx.messaging.messages.AsyncMessage;
import mx.messaging.messages.IMessage;
private function send():void
{
var message:IMessage = new AsyncMessage();
message.body.chatMessage = msg.text;
producer.send(message);
msg.text = "";
}
private function messageHandler(message:IMessage):void
{
log.text += message.body.chatMessage + "\n"; }
]]>
</mx:Script>
…
BlazeDS – Lücken

Keine Daten Management Services

Kein RTMP Streaming

Keine reinen AS3 Clients
BlazeDS – Getting Started


Turnkey Server:
−
Fertiges Testpaket für Beispiele
−
Tomcat Server
−
Deployed Data Services
−
Beispielanwendungen
Intro & Remoting Tutorial
www.adobe.com/devnet/livecycle/articles/blazeds_gettingstarted.html

BlazeDS Download:
http://opensource.adobe.com/wiki/display/blazeds/Release+Builds
Interessante Impulse


Milenia Grafter Server
−
Klein, leicht, einfach
−
Hervorragend zum Java ausprobieren
−
http://milgra.com/
Cinnamon
−
−
Java Remoting für Flex und AS3 Clients
Typensicher
Java – AMF – Java
−
http://spicefactory.org/cinnamon/
−
Interessante Impulse


ErlyVideo
−
Erlang basierter Streaming Server
−
http://code.google.com/p/erlyvideo/
Meebo
−
Instant Messaging Plattform
−
Flash API für eigene Multiuser Applikationen
−
http://www.meebo.com/platform/
Coming up
“The Essential Guide to
Open Source Flash Development”
http://www.friendsofed.com/book.html?isbn=9781430209935
Fragen?
Dankeschön!