ebook img

Das Play-Framework und dessen Einsatz zur Entwicklung von Real-Time-Web-Anwendungen PDF

86 Pages·2013·1.2 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Das Play-Framework und dessen Einsatz zur Entwicklung von Real-Time-Web-Anwendungen

Bachelorarbeit Till Theis Das Play-Framework und dessen Einsatz zur Entwicklung von Real-Time-Web-Anwendungen FakultätTechnikundInformatik FacultyofEngineeringandComputerScience StudiendepartmentInformatik DepartmentofComputerScience Till Theis Das Play-Framework und dessen Einsatz zur Entwicklung von Real-Time-Web-Anwendungen BachelorarbeiteingereichtimRahmenderBachelorprüfung imStudiengangBachelorofScienceAngewandteInformatik amDepartmentInformatik derFakultätTechnikundInformatik derHochschulefürAngewandteWissenschaftenHamburg BetreuenderPrüfer:Prof.Dr.FriedrichEsser Zweitgutachter:Prof.Dr.JuliaPadberg Eingereichtam:21.November2013 TillTheis ThemaderArbeit DasPlay-FrameworkunddessenEinsatzzurEntwicklungvonReal-Time-Web-Anwendungen Stichworte Play,Scala,Real-Time-Web,Reaktiv,FunktionaleProgrammierung,Iteratees Kurzzusammenfassung DieseArbeitstelltdasPlayFrameworkvorundlegtihrenSchwerpunktdabeiaufdieEntwick- lungvonReal-Time-Web-Anwendungen.DiessindinteraktiveAnwendungen,diedemNutzer Datenanzeigen,sobaldsiedemServerbekanntwerdenundnichterst,wennderNutzerdie Seiteneulädt.Umdieszuerreichen,stelltPlayeineIteratee-BibliothekzurVerfügung,die esermöglichtDatenströmereaktivundinkrementellzuverarbeiten.DieseIteratee-Streams werdenmitsamtihrenDesignentscheidungenundAnwendungsmöglichkeitenerläutert,um anschließendeineAnwendungaufBasisvonihnenzuentwickeln. TillTheis Titleofthepaper ThePlayFrameworkanditsUseforDevelopingReal-TimeWebApplications Keywords Play,Scala,Real-TimeWeb,Reactive,FunctionalProgramming,Iteratees Abstract ThisthesisisanintroductiontothePlayframeworkandfocusesonitsfeaturesfordeveloping real-timewebapplications. Real-timewebapplicationsareapplicationsthatpushinformation totheuserassoonastheserverreceivestheminsteadofrequiringtheusertomanuallyreload thepage. InordertoachievethatPlayshipswithanIterateelibrarythatmakesitpossible toreactivelyandincrementallyprocessdatastreams. TheseIterateestreamsaswellastheir design and application possibilities will be explained to finally develop an application that buildsonthem. Inhaltsverzeichnis 1. Einleitung 1 1.1. EntwicklungdesWebs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. Real-Time-Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3. MotivationundZiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4. Themenabgrenzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5. Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Grundlagen 4 2.1. Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. ErstelleneinerAnwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3. Verzeichnisstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4. StarteneinerAnwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.5. Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.6. Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.7. Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.8. View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.8.1. ViewsinPlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.8.2. Altersstatistiken-View . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.9. SammelnderStatistiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.9.1. FormularinderView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.9.2. EintraginderRouten-Datei . . . . . . . . . . . . . . . . . . . . . . . . 12 2.9.3. DynamischeStatistikenundFormularverarbeitungimController . . . 12 3. ReaktiveProgrammierung 15 3.1. Monaden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.1. MonadeninderKategorientheorie . . . . . . . . . . . . . . . . . . . . 15 3.1.2. Kleisli-TripelinderKategorientheorie . . . . . . . . . . . . . . . . . . 16 3.1.3. MonadeninScala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.4. BeispielefürMonaden . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.5. for-Comprehensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.6. Gesetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2. FuturesundPromises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.1. Futures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.2. Promises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.3. ExecutionContexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 iv Inhaltsverzeichnis 3.3. Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1. DesignvonStreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2. DesignvonInputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.3. DesignvonIteratees . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.4. DesignvonEnumerators . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.5. DesignvonEnumeratees . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.6. DesignvonKomposition . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.7. AnwendungvonStreams . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.8. AnwendungvonIteratees . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.9. AnwendungvonEnumerators . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.10. AnwendungvonEnumeratees . . . . . . . . . . . . . . . . . . . . . . . 37 3.3.11. AnwendungvonKomposition . . . . . . . . . . . . . . . . . . . . . . . 41 3.3.12. Gesetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4. Real-Time-Web 49 4.1. Web-Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.1.1. Client-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.1.2. Server-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.3. Altersstatistiken-Anwendung . . . . . . . . . . . . . . . . . . . . . . . 50 4.2. ServerSentEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.2.1. Client-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2.2. Server-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2.3. Altersstatistiken-Anwendung . . . . . . . . . . . . . . . . . . . . . . . 54 4.3. WebSocketsvs.ServerSentEvents . . . . . . . . . . . . . . . . . . . . . . . . 56 5. Anwendung:TwitterNews 57 5.1. Idee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2. Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.3. Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3.1. Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3.2. DasTwitter-Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.3. DasTwitterNews-Model . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.4. DerApplication-Controller . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3.5. DieClient-Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6. FazitundAusblick 65 6.1. Fazit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.2. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 A. Vorbereitung 68 A.1. Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 A.2. Software-Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 A.3. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 v Inhaltsverzeichnis B. InhaltderbeiliegendenCD 70 Literaturverzeichnis 71 vi Listings 2.1. Dieroutes-Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. DerAgeStatistics-Typ-Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. DasAgeStatistics-Hilfsobjekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4. DerApplication-Controllermitindex-Aktion . . . . . . . . . . . . . . . . . . . 8 2.5. EineinfachesView-Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.6. DasView-Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.7. DasView-TemplatemitFormular . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.8. DieRouten-EintragfürFormulareingaben . . . . . . . . . . . . . . . . . . . . 12 2.9. FormularverarbeitungimController . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1. DieMonaden-OperationenderKategorientheorie . . . . . . . . . . . . . . . . 16 3.2. DieKleisli-Tripel-OperationenderKategorientheorie . . . . . . . . . . . . . . 16 3.3. DieMonaden-OperationeninScala . . . . . . . . . . . . . . . . . . . . . . . . 17 3.4. DieOption-Monade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5. Monaden-Operationenmitfor-Comprehension . . . . . . . . . . . . . . . . . . 19 3.6. Futureskombinieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.7. Future-ErstellungmiteinemPromise . . . . . . . . . . . . . . . . . . . . . . . 22 3.8. DerInput-Datentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.9. DerStep-Datentyp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.10. DerEnumerator-Datentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.11. DerEnumeratee-Datentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.12. DieSignaturvonfold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.13. ErstellungeinesIterateesdurchVererbung . . . . . . . . . . . . . . . . . . . . 30 3.14. ErstellungeinesIterateesdurcheineKonstruktormethode . . . . . . . . . . . 31 3.15. ErstellungeinesIterateesdurchKonstruktormethodeimCompanion-Objekt . 32 3.16. AusführungeinesIterateesdurchfolder-Funktion . . . . . . . . . . . . . . . . 32 3.17. ErstellungeinesEnumeratorsdurchVererbung . . . . . . . . . . . . . . . . . . 34 3.18. ErstellungeinesEnumeratorsdurchdieapply-Konstruktormethode . . . . . . 35 3.19. ErstellungeinesEnumeratorsdurchdiebroadcast-Konstruktormethode . . . . 36 3.20. AnwendungeinesEnumeratorsaufeinenIteratee . . . . . . . . . . . . . . . . 36 3.21. ExtrahierungdesErgebnissesauseinemIteratee . . . . . . . . . . . . . . . . . 37 3.22. AnwendungeinesEnumeratorsmitgleichzeitigerErgebnisextrahierung . . . 37 3.23. ErstellungeinesEnumerateesdurchVererbung. . . . . . . . . . . . . . . . . . 38 3.24. DieSignaturvonEnumeratee.map . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.25. DievereinfachteSignaturvonEnumeratee.map . . . . . . . . . . . . . . . . . 39 vii Listings 3.26. ErstellungeinesEnumerateesdurchdiemap-Konstruktormethode . . . . . . . 39 3.27. EnumerateeanwendungaufIteratees . . . . . . . . . . . . . . . . . . . . . . . 40 3.28. DieSignaturvoncompose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.29. EnumerateeanwendungaufEnumeratees . . . . . . . . . . . . . . . . . . . . . 41 3.30. SequentielleKompositionvonIteratees . . . . . . . . . . . . . . . . . . . . . . 42 3.31. SequentielleKompositionvonIterateesmitfor-Comprehension . . . . . . . . 42 3.32. DieSignaturvonEnumeratee.zip . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.33. ParalleleKompositionvonIterateesmiteinerQuelleundmehrerenSenken . . 43 3.34. ParalleleKompositionvonIterateesmitmehrerenQuellenaufeineSenke . . . 44 3.35. SequentielleKompositionvonEnumerators . . . . . . . . . . . . . . . . . . . . 44 3.36. DieSignaturvoninterleave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.37. ParalleleKompositionvonEnumerators . . . . . . . . . . . . . . . . . . . . . . 45 3.38. Typ-AliasederGesetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.39. Kompositionsregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.40. Verkettungsregel,wenneinIterateedieEingabeerkennt . . . . . . . . . . . . 46 3.41. Verkettungsregel,wenneinIterateedieEingabenichterkennt . . . . . . . . . 47 3.42. Nullelementregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.43. Rechtsdistributivitätsregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.44. IdempotenzeinesIteratees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.1. DasWebSocket-InterfaceinJavaScript . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Web-Socketsinderroutes-DateiderAltersstatistiken-Anwendung . . . . . . . 50 4.3. Web-SocketsimControllerderAltersstatistiken-Anwendung . . . . . . . . . . 51 4.4. Web-SocketsinderViewderAltersstatistiken-Anwendung . . . . . . . . . . . 51 4.5. DasEventSource-InterfaceinJavaScript . . . . . . . . . . . . . . . . . . . . . . 53 4.6. ServerSentEventsaufServer-Seite . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7. ServerSentEventsinderinput-ActionderAltersstatistiken-Anwendung . . . 54 4.8. ServerSentEventsinderroutes-DateiderAltersstatistiken-Anwendung . . . 54 4.9. ServerSentEventsimControllerderAltersstatistiken-Anwendung . . . . . . 55 4.10. ServerSentEventsinderViewderAltersstatistiken-Anwendung . . . . . . . 55 5.1. DieTwitterNews-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2. DieVerarbeitungeingehenderTweetsinderTwitterNews-Klasse . . . . . . . 61 5.3. DermostDiscussedEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 viii 1. Einleitung IndiesemKapitelwirderläutert,wasdasReal-Time-WebausmachtundwasmitdemPlay- FrameworkunddieserArbeiterreichtwerdensoll.EswirdeinÜberblicküberdiebisherige EntwicklungdesWebsgegebenunddifferenziert,womitsichdieseArbeitgenaubeschäftigt und womit nicht. Anschließend wird beschrieben, wie die weitere Struktur dieser Arbeit aussieht. 1.1. Entwicklung des Webs NachTaivalsaariundMikkonen2011(S.1–3)wardasWorldWideWebder1990erJahreein Medium,beidemeinzelneDokumenteimVordergrundstanden.DasklassischeWebderersten HälftedesJahrzehntsbestandausDokumentenmitText,BildernundLinks.DiezweiteHälfte machte das Hybrid Web aus. Browsertechnologien, wie Javascript und CSS, sowie Plugins wieFlashundQuickTimewurdenentwickeltunderweitertendiestatischenDokumenteum interaktiveElemente. Inden2000ernverbreitetesichdasdynamischeSendenundAnfordernvonDatenunter demNamenAjax(AsynchronousJavaScriptandXML).GegenEndedesJahrzehntswurden dievorhandenenTechnologiengenutzt,umganzeAnwendungendamitzuschreiben,wiez.B. FacebookoderTwitter. 1.2. Real-Time-Web EineReal-Time-Web-AnwendungisteineWeb-Anwendung,dieautomatischneueDatenan den Client sendet, sobald diese dem Server bekannt werden. Dies unterscheidet sich vom klassischen Pull-Prinzip, in dem nur der Client per Anfrage eine neue Seite beim Server anfordernkann.BeiReal-Time-Eventsistesstattdessennotwendig,dassderServermittels Push-PrinzipneueInformationenandenClientsendet(vgl.Bozdagu.a.2007,S.1).Facebook beispielsweisezeigtneueStatusmeldungenvonFreundenan,ohnedassmanuelldieSeiteneu geladenwerdenmuss. 1 1. Einleitung 1.3. Motivation und Ziel WennmandieinAbschnitt1.1beschriebeneEntwicklungdesWebsbetrachtet,knüpftdasReal- Time-Webgenaudaranan.DerNachrichtenverkehrverläuftnichtmehrnurvomClientzum Server,sondernauchinumgekehrterRichtungvomServerzumClient.DasPlay-Framework wirdvonTypesafe,derFirmavonScalasBegründerMartinOdersky,unterstütztundwirbtda- mit,diepassendenWerkzeugezurEntwicklungmodernerWeb-Anwendungenzubesitzen(vgl. ZenexityundTypesafeInc.2013k).Kernpunkte,diePlayauszeichnen,sindstarkeTypsicherheit durchdieNutzungvonScala,sowieeineArchitektur,diemoderneclientseitigeTechnologien unterstützt(vgl.Hiltonu.a.2013,S.4).EsgibtzwarweitereWeb-FrameworksfürScala,diese sindallerdingswenigerbreitaufgebaut,weshalbPlaydasPotenzialbesitzt,dasFrameworkfür Scalazuwerden(vgl.Hiltonu.a.2013,S.8).ZieldieserArbeitistes,herauszufinden,obPlay diesenAnforderungengerechtwirdundwiedamitReal-Time-Web-Anwendungenentwickelt werdenkönnen.DazusollendiedafürbenötigtenKernkomponentenvorgestelltundanalysiert werden,umdamitschließlicheineeigeneReal-Time-Web-Anwendungzuentwickeln. 1.4. Themenabgrenzung DieseArbeitbeschäftigtsichinersterLiniemitdenTeilendesPlay-Frameworks,diebenötigt werden, um Real-Time-Web-Anwendungen damit zu entwickeln. Zusätzlich wird benötig- tes Hintergrundwissen, wie Architektur und Grundlagen des Frameworks zur Verfügung gestellt.EinigeThemenbereiche,diedafürnichtelementarsind,wiez.B.Datenbanken,wer- dennichtbehandelt.DesWeiterenwirdvorausgesetzt,dassder/dieLeserInbereitsmitden GrundtechnologienderWeb-Entwicklung,wieHTML,CSSundJavaScriptvertrautist.Ein JavaScript-Frameworkwirdabernichtverwendet,umkeinweiteresVorwissenvorauszusetzen. 1.5. Struktur ImzweitenKapitelwirdgezeigt,welchegrundlegendenWerkzeugedasFrameworkfürdie EntwicklungvonWeb-Anwendungenbesitztundwiediesezuverwendensind.Dazuwird zunächst erklärt, wie eine statische Website erstellt wird, um diese später um Real-Time- Komponentenzuerweitern.NachdemdieGrundtechnikenzurHandhabungdesFrameworks aufgezeigtwordensind,wirdimdrittenKapitelindiereaktiveProgrammierungeingeführt. Diese ist grundlegend, um Plays Stream-Bibliothek zu verstehen, die im Mittelpunkt der EntwicklungvonReal-Time-Web-Anwendungensteht.DasvierteKapitelerklärt,wieaufder Client-SeitemittelsJavaScriptmitdemServerkommuniziertwird.MitdiesemWissenwird 2

Description:
This thesis is an introduction to the Play framework and focuses on its features .. 2. Grundlagen. In diesem Kapitel werden die grundlegenden Techniken zur
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.