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!