44
Institutionen för ekonomi och IT Avdelningen för medier och design Multiplayerupplevelse i webbapplikationer utvecklade med Node.js och WebSocket Anton Gustavson Eduardo Jönnerstig Kandidatuppsats, 15 hp Examensarbete i medieinformatik Vårterminen 2015 Handledare: Tomas Lindroth Examinator: Jan-olof Karlsson

Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Institutionen för ekonomi och IT Avdelningen för medier och design

Multiplayerupplevelse i webbapplikationer utvecklade med Node.js och WebSocket Anton Gustavson Eduardo Jönnerstig

Kandidatuppsats, 15 hp Examensarbete i medieinformatik Vårterminen 2015

Handledare: Tomas Lindroth Examinator: Jan-olof Karlsson

Page 2: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Abstract The purpose of this research was to delve into the process of developing real time applications for the web via the use of JavaScript based frameworks and code libraries – that run on both the client and the server. To aid us in this endeavor we have developed a test application in the form of a real time multiplayer game. We believe this project to be an appropriate model for experimentation as the market is currently showing an increasing interest in tools which facilitates the development of platform independent games. We have specifically examinined how technologies such as Node.js and WebSocket can be used in order to deliver a multiplayer experience that adequately satisfies the demands and expectations of the prevailing market as it pertains to applications of this kind. Apart from measuring the actual latency for each game round during our experiments, we have also made use of subjective evaluation through the Mean Opinion Score (MOS). This research paper also introduces the term “multiplayer experience” in order for us to encapsulate and relate to the user’s subjective experience of simultaneous interaction. Our research has led us to conclude that there is no definitive or all-encompassing metric by which to judge the threshold for acceptable latency that is applicable to all games. The results from our tests do however show that Node.js and WebSocket – at least in regards to our own application – can be used to deliver an acceptable multiplayer experience.

i

Page 3: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Sammanfattning I det här arbetet så redogör vi för processen av att utveckla en realtidsbaserad webbapplikation med hjälp av ett antal ramverk och kodbibliotek – för både klient och server – som är skrivna i JavaScript. Vår testmodell består av ett enklare realtidsbaserat multiplayerspel, ett projekt som vi såg som en lämplig kandidat då intresset för plattformsoberoende multiplayerspel på marknaden ökar. Utifrån laborationer och kodexperiment granskar vi hur teknologierna Node.js och WebSocket kan användas för att möjliggöra för en multiplayerupplevelse som lever upp till de förväntningar som ställs på denna typ av applikation.

Utöver att ha mätt de faktiska överföringstiderna för varje spelomgång så har vi dessutom brukat oss av en subjektiv värderingsskala kallad Mean Opinion Score (MOS). Vi inför också begreppet multiplayerupplevelse för att kunna förhålla oss till användarens subjektiva upplevelse av simultan interaktion.

Vi kommer fram till att det inte går att fastställa ett definitivt och allomfattande gränsvärde för latenstider, utan det skiljer sig från spel till spel. Resultaten från mätningarna av vår egen applikation visar att Node.js och WebSocket kan leverera en acceptabel multiplayerupplevelse.

ii

Page 4: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Multiplayerupplevelse i webbapplikationer utvecklade med Node.js och WebSocket

Begreppsordlista Multiplayerupplevelse Multiplayerupplevelsen är ett begrepp som vi har valt att införa för att kunna förhålla oss till användarens subjektiva upplevelse av simultan interaktion. En ideal multiplayerupplevelse innebär att de inblandade spelarna inte upplever nätverket som en faktor.

Skriptspråk Ett scriptspråk är ett tolkat programmeringsspråk, dvs. ett språk vars program i förväg inte behöver kompileras till maskinkod på den givna enheten för att kunna köras, istället sker denna process vid exekveringstillfället (Vanguardsw.com, 2015).

Webbapplikation Mjukvara som inte behöver installeras på den egna maskinen utan kan köras direkt via webbläsaren.

iii

Page 5: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Multiplayerupplevelse i webbapplikationer utvecklade med Node.js och WebSocket

Innehållsförteckning

Abstract .............................................................................................................................. i

Sammanfattning ................................................................................................................ ii

Begreppsordlista ............................................................................................................... iii

1 Inledning ....................................................................................................................... 1 1.1 Bakgrund ................................................................................................................ 3 1.1.1 Webbläsaren som plattform ......................................................................... 3 1.1.2 JavaScript ...................................................................................................... 3 1.1.2.1 JavaScript på servern .............................................................................. 4 1.1.3 Klient-server-kommunikation över webben................................................. 7 1.1.3.1 Polling och long polling ........................................................................... 7 1.1.3.2 Server Sent Events ................................................................................ 10 1.1.3.3 WebSocket ............................................................................................ 11 1.2 Syfte ..................................................................................................................... 13 1.3 Frågeställning ....................................................................................................... 14 1.4 Avgränsningar ...................................................................................................... 14

2 Teori ............................................................................................................................ 15

2.1 Mean opinion score .............................................................................................. 15

2.2 Multiplayer och spelupplevelsen .......................................................................... 16

3 Metod ......................................................................................................................... 17

3.1 Planerat angreppssätt ........................................................................................... 17

3.1.1 Kvantitativ datainsamling ............................................................................. 17

3.1.2 Enkät ............................................................................................................. 19

3.2 Genomförandebeskrivning ................................................................................... 20

3.2.1 Designspecifikation ...................................................................................... 22

3.2.1.1 AngularJS................................................................................................. 22

3.2.1.2 Phaser ..................................................................................................... 23

3.2.1.3 Socket.io ................................................................................................. 23

3.2.1.4 Mongodb ................................................................................................ 24

3.2.1.5 Express .................................................................................................... 24

4 Resultat ....................................................................................................................... 25

4.1 Fjärrvärd ................................................................................................................ 25

4.2 Lokal värd .............................................................................................................. 28

5 Diskussion ................................................................................................................... 31

6 Slutsats ........................................................................................................................ 33

Källförteckning ................................................................................................................. 34

iv

Page 6: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

1 Inledning Med utgångspunkt från hur utveckling av webbaserade digitala artefakter går till i dag så kan man konstatera att internet har genomgått en del väsentliga omställningar sedan dess tillblivelse under mitten av 90-talet (Pace Creative, 2015). Då var webbsidor inget mer än statiska HTML dokument, vilka eventuellt länkade till andra statiska HTML dokument. I dagens läge tenderar vi istället att se webbsidor som någon form av mjukvara (Koenig, 2013), med mer eller mindre komplex funktionalitet och förmågan till att leverera dynamiskt innehåll till en ständigt växande och varierande uppsättning enheter. Det finns en rad teknologiska förändringar som har lagt grunden för detta - en del av vilka gemensamt inryms i begreppet Web 2.0 (O'Reilly 2007). Här står skriptspråk som PHP och JavaScript som exponenter i sammanhanget, och det är med hjälp av dem som moderna webbapplikationer förses med den logik som krävs för att realisera de allt mer tilltagande kraven på funktionalitet.

Det övergripande intresseområdet – i fråga om ökade krav på funktionalitet – som det här arbetet kommer att behandla är realtidskommunikation. Mer specifikt så kommer vi att utgå ifrån JavaScript och vilka möjligheter det erbjuder på både klient och server när det kommer till utveckling av realtidsbaserade webbapplikationer. Begreppet klient syftar här till den dator eller enhet som kommunicerar med servern. En server kan i sin tur beskrivas som ett datorsystem som expedierar klienter, dvs. tillhandahåller centraliserade tjänster som klienten brukar.

Termen realtidsbaserad webbapplikation omfattar en förhållandevis varierad grupp av applikationer. Det kan bland annat röra sig om chat-applikationer, kollaborativa ordbehandlare, visualiseringsverktyg för börsdata eller mikrobloggar. Facebook Messanger (Rai, 2013) och Google Docs (Schmid, Lisowska Masson and Hirsbrunner, 2013) är applikationer som skulle kunna lyftas fram som en slags typ-exempel här. Men även här skulle man kunna differentiera dessa applikationer ytterligare, nämligen utefter hur höga krav de ställer på gensvar vid realtidskommunikation. Med andra ord, hur många millisekunder som man anser rimligen ska få ha fortlöpt – från dess att klienten har skickat en förfrågan, tills dess att klienten mottagit ett svar från serven. Realtidsbaserade spel som stödjer multiplayer, dvs. flerspelarläge, är en typ av applikation som tenderar att ställa i synnerhet höga krav på denna punkt då de är beroende av att speltillståndet uppdateras efter en förhållandevis kort tidsintervall, ibland uppemot 33-66 gånger per sekund (Bergström, 2012). Vilka möjligheter som finns till att implementera denna typ av applikation i en

1

Page 7: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

webbläsare är därför något som är intressant att titta närmare på, inte minst för spelutgivare.

Den mobila spelmarknaden växer ständigt, och enligt en studie av The NPD Group (Npd.com, 2015) har den genomsnittliga speltiden ökat med 57 % över en period på två år – från en timme och 20 minuter per dag, till över två timmar. Trots att det spelas mer på mobila enheter så spelas det lika mycket på PC och konsol nu som för ett år sedan, och bara 20 % spelar uteslutande på mobila enheter. I och med det ständiga växande spektrumet av skärmstorlekar, operativsystem och typer av inmatningskällor blir det en allt större utmaning för spelutvecklare att tillverka plattformsoberoende spel. Genom att utveckla spel avsedda för enheternas webbläsare går det att nå ut till ett stort antal typer av enheter – med en gemensam kodbas.

Teknologier såsom WebGL möjliggör för rendering av 3D- och 2D-grafik i webbläsaren (Mozilla Developer Network, 2015a). WebGL kräver ingen installation av plugins utan fungerar direkt på enheter som har hårdvara och webbläsare som är kompatibel med tekniken. WebGL används med det canvas-element som introducerades i och med HTML5. Canvas är ett HTML-element som används för att rendera grafik med hjälp av ett skriptspråk, vanligtvis JavaScript (Mozilla Developer Network, 2015b). Canvas kan användas för att rita grafer, göra fotokompositioner eller skapa animationer (Mozilla Developer Network, 2015b).

Vid Fluent Conf 2013 demonstrerade Brendan Eich spelmotorn Unreal engine 3 som han körde direkt i webbläsaren, utan några andra plugins (O'Reilly, 2013). Brendan noterar att utvecklingen har gått fort. Bara ett år dessförinnan ansågs detta ha varit omöjligt att genomföra, men nu närmar sig WebGL – med hjälp av kompileringsverktyg som asm.js – en kodhastighet som blott är en och en halv gång så långsam som en kompilerad lösning (O'Reilly, 2013). Brendan menar också att detta är något som välkomnas av spelutgivare.

That was something that we didn’t know we that could do a year ago. That means we’re in spitting distance of native code speed, yet with the reach of the web – which everybody wants. Game publishers want that. They do not want to have another plugin that users have to download and install, with scary dialogue and loss of user acquisition. They want the web, and now the web can do this (O'Reilly, 2013).

2

Page 8: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

1.1 Bakgrund

1.1.1 Webbläsaren som plattform

Det finns givna fördelar med att utveckla applikationer för webben, den mest påtagliga fördelen är kanske det faktum att man kan nå ut till en rad olika ekosystem och hårdvara utan att behöva skriva om sin kod (Wolf, 2013). Olika distributionsplattformar tenderar även att reglera vilka typer av applikationer som tillåts förekomma i deras ekosystem, som app-utvecklare står man därför i något av en asymmetrisk beroendeställning till distributörer och deras app stores (Kushal, 2015). Att utveckla för webben medför även fördelar för konsumenten som slipper omständiga nedladdnings- och installationsprocesser då webbapplikationer körs direkt i webbläsaren (Stanley, 2015). Kring JavaScript – vilket är det primära programmeringsspråket för webbläsaren (Crockford, 2008) – finns även en stark anknytning till open source (DeCausemaker, 2014) med många ramverk och andra verktyg är fritt tillgängliga för den presumtiva utvecklaren.

1.1.2 JavaScript

JavaScript är ett lättviktigt skriptspråk för programmering på klientsidan. Det stöder multipla programmeringsparadigm som bland annat eventdriven, objektorienterad och funktionell programmering. JavaScript kom till under mitten av 90-talet genom utvecklaren Brendan Eich (Lohr, 1996). I tidigare iterationer så kallades det bland annat för LiveScript (Lohr, 1996). Språket fick sitt nuvarande namn av marknadsföringsmässiga skäl då företagen Netscape och Sun Microsystems ingick i ett samarbete för att utmana Microsoft. Detta namnbyte har lett till en del missförstånd kring språket – som bortsett ifrån en del ytliga syntaktiska likheter delar väldigt få gemensamma drag med sin namne Java (Crockford, 2015). Några av de mer påtagliga skillnaderna hos JavaScript är (YUI Library, 2011):

• En prototypbaserad arvsmodell.

• Dynamiska datatyper.

• Bruket av en underförstådd gemensamt delad namnrymd - dvs. global namnrymd - för variabler. Försöker man tilldela ett värde till en ännu icke-deklarerad variabel i sin JavaScript-kod så genererar detta inget fel, variabeln hamnar istället i den globala namnrymden, dvs. i window-objektet.

• Implicit typkonvertering.

• Lambda, dvs. funktioner som en förstaklassens objekt. Även kallade anonyma funktioner, eller funktions-litteraler.

3

Page 9: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

• Objekt-litteraler – dvs. associativa arrayer som kan skapas utan tillämpandet av en konstruktor-funktion. Dessa kan enkelt utökas vid behov genom att tilldela dem nya fält och/eller metoder.

Några av dessa särdrag, såsom den implicita konverteringen av datatyper eller en programmeringsmodell baserad på bruket av global variabler är att betrakta som designfel i språket (Crockford 2008, s.3). Men överlag så innehåller JavaScript många kraftfulla och flexibla delar, och det har med tiden kommit att etablera sig som det primära språket för kodning i webbläsaren. Trots sin rådande ställning så har JavaScript länge haft ett oförtjänt dåligt rykte, och betraktades av många utvecklare som ett programmeringsspråk för amatörer (Crockford, 2015). Detta kan röra sig om en kvarleva från de omständigheter som rådde kring språket under dess tidiga dagar med bland annat bristfälliga specifikationer av språket och en allmänt undermålig implementation. Dessutom medförde dess lättillgänglighet som språk en föreställning hos många om att de egentligen inte behövde lära sig JavaScript för att kunna komma igång och börja koda i det, JavaScript var så pass expressivt som programmeringsspråk att det var möjligt för nybörjare inom området att använda sig av det ändå (Crockford 2008, s.2).

Oavsett vilken inställning man som utvecklare har till JavaScript så kan man inte bortse från den inverkan det har haft på ett område som webbprogrammering de senaste 10 åren. I takt med att JavaScript tillsammans med HTML5 har mognat så har tidigare dominanta teknologier på klient-sidan - såsom Flash - fått allt styvare konkurrens (Nieva, 2015). Men det är dittills främst i browsern som JavaScript har verkat. På server-sidan har man fortfarande fått väga upp med andra dedikerade språk som exempelvis PHP eller ASP.NET (W3techs.com, 2015).

1.1.2.1 JavaScript på servern

I maj 2009 (Chaniotis, Kyriakou och Tselikas, 2014) så presenterades Node.js för fösta gången vid JSConf EU av den då frilansande programmeraren Ryan Dahl (Mastering Nodejs, 2015). Node.js är en runtime-miljö för applikationer på servern som är skrivna i JavaScript. Tilkov och Vinoski (2010) menar att det som skiljer Node.js från andra serverlösningar som exempelvis Apache är dess asynkrona och icke-blockerande sätt att behandla I/O, vilket är en måttenhet för det flödet av data som sker i kommunikationen mellan olika delar av ett datorsystem (Oracle, 2015). Node.js är ett enkeltrådat system, det betyder att alla processer sköts av endast en exekveringstråd kallad event-loopen (Shuhao et al., 2015). Event-loopen kan beskrivas som en kontinuerligt fortlöpande anropshanterare som fångar upp inkommande requests till servern och för dem vidare till en exekveringskö (Erbad, Hutchinson och Krasic, 2012, s. 163). Event-loopen hanterar inte behandlingen av

4

Page 10: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

varje enskild process i sig utan istället så tilldelas varje process en så kallad asynkron callback-funktion (Chaniotis, Kyriakou och Tselikas, 2014). En asynkron callback-funktion är helt enkelt en funktion som anropas av en annan funktion vid en obestämd punkt i framtiden, ofta i samband med att ett event har genererats (Erbad, Hutchinson och Krasic, 2012). Det är ett sätt att frigöra huvudprogrammet från att behöva vänta på svar från filsystem, databaser eller andra samverkande aktörer vid behandlingen av en pågående process (Erbad, Hutchinson och Krasic, 2012). När väl en callback-funktion har verkställts så plockas svaret upp av event-loopen vid närmast möjliga tillfälle och returneras till den klient som skickade den ursprungliga förfrågan.

(Figur 1. Event-loopen)

I flertrådade serversystem som Apache så sköts behandlingen av processer med en dedikerad exekveringstråd per process. För att kringgå problematiken som uppstår på grund av blockerande kod så ökar man i detta fall alltså antalet exekveringstrådar (Tilkov och Vinoski, 2010). Varje enskild exekveringstråd behandlar sin givna process synkront, så interna väntetider kan ändå uppstå, men då dessa exekveringstrådar körs parallellt med varandra så hålls servern fortsatt mottaglig för nya inkommande requests (Tilkov och Vinoski, 2010). Det finns dock ett problem med denna typ av lösning och det är skalbarhet. Eftersom antalet exekveringstrådar i ett tråddrivet system står i direkt förhållande till antalet användare så ställs stora krav på systemets resurser (Tilkov och Vinoski, 2010). En Apache-server har ett tak för antalet simultana exekveringstrådar som tillåts att köras. Detta tak är knutet till den mängd RAM-minne som har allokerats till Apache

5

Page 11: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

av den miljö som den körs i (Fuscata, 2015). Vanligtvis är Apache för-konfigurerat för att som mest serva 256 simultana klienter (Apache.org, 2015), när detta tak nås så nekas ytterligare requests till systemet.

Kärnkoden i Node.js är skriven i C vilket är ett lågnivåspråk som ligger nära det språk som hårdvaran själv använder. Med andra ord så kan dess instruktioner effektivt översättas till maskinkod. Node.js nyttjar även Googles kraftfulla JavaScript-motor V8 vilket i sin tur är skrivet i C++. Kring denna prestandafokuserade kärna så finns ett abstraktionslager i form av Nodes standardbibliotek – skrivet helt i JavaScript (Tilkov och Vinoski, 2010).

(Figur 2. Schematisk skiss över Node.Js)

Det finns givetvis en lockelse i att ha samma språk på klient och server, då det – i alla fall i teorin – gör det enklare för utvecklare som tidigare främst programmerat på klientsidan att vara aktiva i alla led av produktions-pipelinen. Detta kan vara en förklaring till att Node.js de senaste åren har varit mycket omtalat – eller kanske till och med betraktats som det absolut ”hetaste” inom webbutveckling (Hernandez, 2013). Vi anser därför att Node.js, inte minst tack vare dess icke-blockerande modell, har potentialen till att leverera det som krävs för realtidsbaserade multiplayerupplevelser på internet.

6

Page 12: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

1.1.3 Klient-server-kommunikation över webben

Webben är baserad på HTTP, ett protokoll som bygger på ett request/response-förhållande mellan klient och server (Rai 2013, s. 9). Det innebär helt enkelt att klienten begär data av servern (request), och servern svarar genom att skicka den begärda datan (response) som sedan renderas i webbläsaren. HTTP lämpar sig bäst för leverans av statiskt innehåll, och är inte alltid tillräcklig i den era av Web 2.0-anpassade webbapplikationer som karaktäriseras av dynamiskt, användargenererat innehåll och sociala funktioner såsom realtidsbaserad chatt etc.

(Figur 3. Request/Respons mellan klient och server via HTTP)

1.1.3.1 Polling och long polling

Realtidsbaserad kommunikation innebär att mottagaren tar emot information och data i det ögonblick den publiceras (Rai 2013, s. 8). Det kräver att den uppkopplade klienten hela tiden måste vara medveten om förändringar på servern. HTTP är halv-duplex (Taman, 2014), vilket innebär att kommunikation enbart kan ske i en riktning i taget (Riihonen, Werner och Wichman, 2011), och applikationer som bygger på interaktion mellan flertalet uppkopplade klienter kräver full-duplex-kommunikation, d.v.s. simultan och dubbelriktad kommunikation (Riihonen, Werner och Wichman, 2011). För att simulera full-duplex över HTTP existerar flertalet ”hack” (Ray 2013, s. 13) som kräver att två anslutningar skapas – en för inkommande och en för utgående trafik.

7

Page 13: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Ett av dessa ”hack” är polling. Polling var det första försöket att hantera realtidskommunikation i browsern (Lubbers och Greco, 2010), och innebär att klienten periodiskt skickar request till servern, som – oavsett om det existerar ny data eller inte – svarar med ett response (Pimentel och Nickerson, 2012). En klar nackdel med polling är de onödiga request som skickas till servern när den inte har någon ny data att leverera. Polling är en bra lösning om uppdateringar av data sker med ett givet intervall, eftersom det då är möjligt att synkronisera klienten och enbart skicka request till servern när ny information är tillgänglig. Ett tänkbart scenario är t.ex. timvis avläsning av temperatur eller vattennivå (Pimentel och Nickerson, 2012). Realtidskommunikation är dock sällan så förutsägbar, vilket betyder att en oregelbunden ström av uppdateringar, t.ex. i chattapplikationer eller multiplayerspel, kräver en hög anropsfrekvens till servern och genererar därmed ett högt antal onödiga request.

(Figur 4. Polling)

Som en lösning på problemet med onödiga request utvecklades long polling, vilket är en variation av pollingtekniken (Pimentel och Nickerson, 2012). Med long polling svarar inte servern omedelbart om den inte har någon ny data, utan håller kvar

8

Page 14: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

klientens request tills dess att ny data är tillgänglig eller att en tidsgräns passerats. När servern har ny data att leverera skickar servern datan i ett response, och klienten följer omedelbart upp med ett nytt request (Rai 2013, s. 12). Värt att notera är att long polling inte erbjuder några prestandaförbättringar gentemot traditionell polling vid en hög uppdateringsfrekvens (Lubbers och Greco, 2010).

(Figur 5. Long polling)

En annan aspekt som talar emot HTTP vid realtidskommunikation är den stora mängd overhead som protokollet genererar; varje datapaket som skickas innehåller en stor mängd header-information, d.v.s. information om vart paketet är på väg, var det kom ifrån, information om användaragenten etc. (Dixit, 2012). Vi har uppmätt vår overhead till 894 byte, men storleken kan variera och Lubbers och Greco (2010) skriver att de i vissa fall har sett HTTP-headers som överstiger 2000 byte. I och med att headerinformationen måste skickas med varje request och response innebär det att HTTP vid realtidskommunikation – som ofta innebär ett relativt högfrekvent paketflöde – medför ett högt overhead och därmed en hög belastning på server och nätverk (Park et al., 2014).

9

Page 15: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 6. Request header)

(Figur 7. Response header)

1.1.3.2 Server Sent Events

I och med uppgraderingen av HTML, kallad HTML5, infördes två nya metoder för att skicka data från server till klient (Rai 2013, s. 13):

Server Sent Events (SSE) är en teknologi som gör det möjligt att etablera en dataström över vilken servern kan kommunicera med klienten (Rai 2013, s. 13). SSE sänds över det traditionella HTTP-protokollet och erbjuder en enkelriktad kommunikationsström från servern till klienten. Med andra ord kan SSE användas vid de tillfällen då klienten enbart behöver ta emot data, och inte skicka den – t.ex. nyhetsflöden, aktiekurser etc. – och är därför ingen lämplig metod för applikationer som kräver kommunikation i båda riktningar eftersom den i så fall hade behövt kompletteras med en anslutning för inkommande trafik.

10

Page 16: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 6. SSE)

1.1.3.3 WebSocket

Den andra metoden som introducerades genom HTML5 är WebSocket, en teknologi med stöd för full-duplex-kommunikation, d.v.s. ett simultant och dubbelriktat kommunikationsflöde över en gemensam länk – en så kallad socket (Bijin Chen and Zhiqi Xu, 2011).

WebSocket fungerar över Transmission Control Protocol (TCP) som är ett förbindelseorienterat dataöverföringsprotokoll som tillhandahåller en sekventiell dataström (Strowes, 2013). För att åstadkomma en dataström där alla skickade datapaket anländer i ordning återsänder TCP paket som inte kommit fram till sin destination. Det kan ställas i kontrast till protokoll som User Datagram Protocol (UDP) som enbart ser den senaste datan som relevant, och tillåter att datapaketen levereras i oordning eller förloras på vägen (Pimentel och Nickerson, 2012). Genom att hantera datapaketen på detta vis uppnår UDP högre överföringshastigheter och är av denna anledning det protokoll som vanligtvis används vid utvecklingen av multiplayerspel som är beroende av höghastighetskommunikation. Dessvärre har UDP i dagsläget nästintill obefintligt webbläsarstöd vilket gör det mycket svårt för oss att utvärdera. Det är också av denna anledning som webbutvecklare vilka

11

Page 17: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

strävar efter att uppnå ett realtidstroget resultat i sina applikationer får förlita sig på alternativa protokoll.

(Figur 7. WebSocket)

Innan server och klient kan börja sända och ta emot meddelanden måste de öppna en delad anslutning – en så kallad socket. Det görs genom att etablera en handshake där klienten först skickar ett HTTP-request med en förfrågan om att få ansluta, och om servern tillåter detta skickar den ut ett response som accepterar anslutningen och uppgraderar den (Dixit, 2012). När anslutningen väl är öppnad kan server och klient obehindrat skicka datapaket till varandra med en overhead på 2 byte. Det resulterar i en 500:1 till – beroende på storleken på HTTP-headern – 1000:1 reducering av onödig header-data som skickas över nätverket (Lubbers och Greco, 2010).

12

Page 18: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 8. WebSocket handshake request)

(Figur 9. WebSocket handshake response)

Vi har därför valt att fokusera på WebSocket eftersom det protokollet stöder full-duplex-kommunikation, har ett relativt stort stöd bland webbläsare och är jämfört med HTTP ett effektivare protokoll vid den här typen av kommunikation.

1.2 Syfte Det ökande intresset för spel, en växande närvaro på sociala medier, samt den stora tillgängligheten av framförallt mobila enheter med internetuppkoppling, främjar marknaden för plattformsoberoende multiplayerspel.

Syftet med den här undersökningen är att studera om Node.js och WebSocket tillsammans kan möjliggöra för en multiplayerupplevelse som lever upp till de förväntningar som ställs på realtidsbaserade spel.

13

Page 19: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

1.3 Frågeställning Kan Node.js och WebSocket leverera en acceptabel multiplayerupplevelse för realtidsbaserade spel över webben?

1.4 Avgränsningar Vårt arbete kommer endast att fokusera på utveckling av webbapplikationer som är anpassade för att renderas på dator eller surfplatta. Vi kommer inte att implementera någon form av responsiv layout och tar därför inte hänsyn till enheter som har en skärmstorlek mindre än 800 x 600px. Inte heller har vi i våra tester möjlighet att ta hänsyn till eller göra några analyser kring nätverksmässig rättvisa, kontinuitet eller skalbarhet (se avsnitt 2.2). Vi kommer inte att göra några jämförelser mellan olika webbläsare, eller se till andra aspekter som ligger utanför vår utvecklingsmiljö. Detta innebär i praktiken att vi endast utgår ifrån desktop-enheter med wifi-uppkoppling och webbläsaren Chrome. Vi kommer inte att ha möjlighet att jämföra inverkan av olika hårdvara på klient och server i förhållande till utfallen hos våra tester.

I vårt arbete ligger fokus på JavaScript, både på server och på klient. Vi har inte behandlat alternativa lösningar i andra skriptspråk som Python, PHP, eller andra dialekt av JavaScript som UnityScript eller ActionScript etc. Slutligen bör nämnas att vi inte kommer att utföra tester med fler än två simultana spelare, detta är främst av spelmekaniska skäl.

14

Page 20: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

2 Teori 2.1 Mean opinion score I sin studie ”Analysis of Factors Affecting Players’ Performance and Perception in Multiplayer Games” analyserar Dick, Wellnitz och Wolf (2005) olika faktorer som påverkar spelares uppfattning och prestationer i multiplayerspel. De introducerar en egen variant av the Mean Opinion Score (MOS) – en femgradig skala som vanligtvis används inom subjektiv analys av ljud- och videokvalitet – för att klassificera spelarens uppfattning av spelkvalitet (s. 1).

Med hjälp av en enkätundersökning som innehåller frågor om bland annat spelares hårdvara, internetuppkoppling och spelerfarenhet, tar de reda på spelares syn på nätverksmässig latens inom en mängd olika spel (s. 3). De frågade spelarna om vilken den maximala latensen var för att de skulle kunna spela sitt spel utan begränsningar (MOS = 5), vid vilken latens de upplevde små försämringar i spelupplevelsen (MOS = 4), och när fördröjningarna blev så besvärliga att de skulle försöka byta till en annan server (MOS = 2). Dessa värden begärdes för tio olika spel.

I studien utför de också experiment i en kontrollerad testmiljö. Totalt åtta simultana spelare, separerade i två lag, mötte varandra i fyra olika spel. De lät det ena laget spela i perfekta nätverksförhållanden, och utsatte det andra laget för försämrad och varierande nätverkshastighet och därmed utökade latenstider. De berättade inte i förväg för lagen om de varierande nätverksförhållandena för att inte påverka deras uppfattning (s. 4). Alla test genomfördes i två uppsättningar, så båda lagen fick spela i de olika nätverksmiljöerna. De undersökte sedan alla spelarers resultat och hur de påverkades av de olika förhållandena. I nätverket simulerade de fördröjningar (latens) på 0, 50, 150 och 500ms och jitter – d.v.s. variationer i latensen – på 0, 50, 150 och 500ms. Tester utförde på spelen Counter Strike, Unreal Tournament 2004, och Need For Speed Underground 2. De analyserade också spelet Warcraft 3, men eftersom det tog upp till en timme för att genomföra en komplett spelomgång visade det sig inte vara möjligt att testa alla kombinationer av fördröjningar och jitter. De testade därför Warcraft 3 enbart i den opåverkade miljön och i en miljö med latens på 500ms och jitter på 500ms (s. 4).

Dick, Wellnitz och Wolf (2005, s. 7) finner bland annat att spelare generellt sett har en relativt god uppfattning om tröskeln som skiljer en opåverkad spelmiljö från en som påverkas av nätverksrelaterade problem. Deras studie visar dock att spelare ofta har en tendens att underskatta deras maximala tolerans för latens i nätverket.

De fann också indikationer på att olika multiplayerspel påverkades olika mycket under samma nätverksförhållanden. Det gällde till och med spel som föll under

15

Page 21: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

samma kategori, t.ex. förstapersonsskjutare. En anledning till detta trodde de kunde vara underliggande algoritmer eller olika system som förutsåg spelarens rörelser och därmed kompenserade för hög latens (Dick, Wellnitz och Wolf, 2005 s. 7). Beroende på spel kunde till och med de spelare som spelade på det opåverkade nätverket uppleva försämrad spelkvalitet när interaktionen med de andra spelarna var hög, t.ex. vid racingsimulatorer.

2.2 Multiplayer och spelupplevelsen Realtidsbaserade multiplayerspel ställer höga krav på kommunikationshastigheten mellan de involverade klienterna och servern; för att uppnå en bra spelupplevelse där spelarna känner att de har en delad upplevelse med sina motspelare krävs att skillnaderna i spelets tillstånd hos de inblandade parterna hålls till ett minimum (Hansen et al., 2013). Gerla et al. (2012) beskriver fem nätverkstekniska kriterier för multiplayerspel som spelutvecklaren bör ta hänsyn till:

Spelets interaktivitet definieras genom den fördröjning som uppstår från det att en spelhändelse har initierats tills dess att den har synkroniserats mellan alla inblandade spelinstanser. För att försäkra sig om att spelarna har en god spelupplevelse bör tiden som passerar mellan ett händelsetillfälle på en specifik spelinstans och tidpunkten då händelsen har processats hos varje enskild speldeltagare hållas under en viss interaktivitetströskel.

Consistency avser graden av simultan uniformitet mellan de instansierade spelens tillstånd. När det sker fördröjningar i överföringarna mellan klienter och server så kan det uppstå skillnader mellan den data som spelet behandlar, som exempelvis koordinaterna mellan de inblandade parternas spelkaraktärer. Med andra ord så kan en spelare befinna sig på flera olika platser i spelvärlden beroende på vilken instans av spelet som betraktas.

Med nätverksmässig rättvisa menas att varje spelare ska ha samma möjligheter till att vinna i spelet – oavsett nätverksmässiga förutsättningar. Simultant händelseförlopp med likvärdig hastighet bör kunna garanteras för samtliga spelare. Trådlösa spelmiljöer, särskilt över internet, kan generera fördröjningar som medför orättvisa förhållanden för spelarna.

Skalbarhet syftar till systemets förmåga att hantera ett högt antal simultana spelare, i synnerhet i spel med hög hastighet är det ofta så att när spelarantalet orsakar ett överskridande av interaktivitetströskeln nekas spelare tillträde beroende på vilka fördröjningar de upplever. Genom att hålla en hög interaktivitet ökar därmed skalbarhetsgraden och tillåter ett högre antal spelare inom samma virtuella arena.

16

Page 22: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Kontinuitet innebär att spelsessionerna inte avbryts vid frånkopplingar, handoffs (dvs. skifte av källa för uppkopplingen (t.ex. byte av mobilmast)), eller andra trådlösa/mobilrelaterade problem.

Det är när utvecklaren brister i sin hänsyn till någon av de ovanstående kategorierna som multiplayerupplevelsen påverkas negativt.

3 Metod 3.1 Planerat angreppssätt I vårt arbete har vi att använt oss av både kvantitativ datainsamling och uppföljande enkätundersökningar. Under denna del har vi följt den modell för användbarhetstester som framlagts av användbarhetskonsulten Jakob Nielsen (2000). Nielsen (2000) menar att allt för genomarbetade och storskaliga användbarhetstester innebär ett slöseri på resurser, istället uppnås bäst avkasting med hjälp av iterativa och småskaliga tester, där antalet testpersoner uppgår till fem. Detta beror på att det vanligtvis förekommer ett stort överlapp bland de insikter som fås emellan olika tester. Redan vid datainsamling med endast en testperson så uppskattar Nielsen (2000) att man som undersökare har fått reda på en dryg tredjedel av allt som går att veta kring användbarheten i sin digitala produkt. För varje därtill tillförd testperson så avtar avkastingen av insikter.

Nielsens modell är tillämpbar för oss då våra tester i grunden avser att mäta användbarhet i realtidsbaserade multiplayerspel på webben – under de förutsättningar som råder för nätverkskommunikation, med skiftande responstider etc.

Vår testgrupp bestod av individer mellan åldrarna 11 och 34, och detta urval baserade vi på undersökningen genomförd av Npd.com (2015) som visade att personer mellan 6 och 44 års ålder är de som spelar mest. Vår avsikt var därför att efter bästa förmåga återspegla denna demografiska profil i vårt urval.

3.1.1 Kvantitativ datainsamling

När det gäller bedömningen av vilken eventuell inverkan som latens kan ha på multiplayerupplevelsen så valde vi i detta arbete att utgå ifrån en variant av den metod som Gerla et al. (2012) använde sig av i sina undersökningar av interaktiva spel över mobila nätverk.

Gerla et al. (2012) var intresserade av att uppnå en djupare förståelse för orsakssambandet mellan höga responstider i nätverk och förväntad

17

Page 23: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

spelarprestation. I sina tester utgick de från multiplayer-läget av FPS-spelet (first person shooter) Quake III Arena (id Software, 1999). Valet av spelgenre motiverades bland annat av de höga krav som FPS-spel tenderar att ställa på realtidskommunikation. Gerla et al. (2012) använde sig av spelarnas poängställning vid specifika tillfällen som indikator på den effekt som fördröjningar i nätverkskommunikationen har på utfallet i denna typ av spel.

I likhet med den i ovan beskrivna modellen så har vi i våra egna undersökningar använt oss av ett experimentfält vilket bestod utav en webbserver och ett antal klienter. Webbserverns uppgift var att ta emot och propagera spelhändelser som att uppdatera poängställning och spelarposition, de övriga delarna av spelet såsom rendering, mappning av spelkontroller etc. sköttes av respektive klient. Vid varje testtillfälle så har vi låtit webbservern interagera med två simultana klienter. Spelarna bakom dessa klienter har då instruerats att efter bästa förmåga försöka styra sina spelkaraktärer och samla in så många poänggivande föremål som de kunde under en förutbestämd tidsperiod.

Sammantaget har våra tester omfattat tio separata spelomgångar som utfördes under samma dag i två olika testmiljöer – fem spelomgångar utfördes mot fjärrvärd och fem spelomgångar utfördes mot lokal testmiljö — med fem olika testpersoner som genomförde testet på stationära datorer.

Vår fjärrvärd hostades av Openshift, ett amerikanskt företag som erbjuder webbhotell för bland annat Node.js, och är en av deras gratisservrar. Vår förstudie av Openshift-servern visade ökade latenstider i jämförelse med den lokala servern, till följd av detta förväntar vi oss en något försämrad multiplayerupplevelse på fjärrvärden.

I samband med avslutat spel så har latensen för den omgången loggats, dvs. hur många millisekunder som har hunnit fortlöpa från dess att ett request har skickats tills dess att ett response har mottagits. Detta har utgjort grundupplägget för våra tester. Testerna har först genomförts på en lokal webbserver och sedan återupprepats på en fjärrvärd. Anledningen till att vi först utförde testerna lokalt var för att vi skulle kunna erhålla kontrollvärden. I en lokal miljö så är det mindre troligt att latensen påverkas av de yttre faktorer som annars kan inverka på en fjärruppkoppling (avstånd till servern etc.), därför var det intressant att även utföra tester under dessa förhållanden för att se vad det hade för påverkan på latensen och multiplayerupplevelsen.

Resultaten av dessa tester kommer sedan att sammanställas för att påvisa de reella förhållanden som har rått i fråga om latens vid varje speltillfälle. Denna data utgör

18

Page 24: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

sedermera en objektiv referensram som vi kan använda oss av i det efterföljande ledet av undersökningen, nämligen uppföljande enkätundersökningar.

3.1.2 Enkät

Denscombe (2010, s. 161) framhåller hur viktigt det är med tydliga instruktioner vid enkätundersökningar. Enkätskaparen bör aldrig förutsätta att det är självklart för respondenten hur denne ska gå till väga för att svara på frågorna. Misstagen som görs av respondenten kan ogiltigförklara hela undersökningen (Denscombe 2010, s. 161) och vi var därför på plats och gav muntliga instruktioner för hur vi önskade att respondenten skulle göra för att svara på frågorna.

Efter varje avslutad spelomgång presenterades spelaren med en enkät vilket innehöll frågor om spelupplevelsen i relation till de upplevda nätverksförhållandena. Enkäten inleddes med att spelaren fick värdera multiplayerupplevelsen enligt en femgradig skala baserad på den tidigare beskrivna Mean Opinion Score (MOS) of multiplayer games (Dick, Wellnitz och Wolf 2005, s. 1).

(Figur 10. MOS-skalan)

Det är värt att notera att det förelåg vissa skillnader i hur vi använde oss utav poängställningen som indikator i våra tester jämfört med hur det gjordes i studien av Gerla et al. (2012). Det var inte en spelares egna poäng som påvisade vilka följder fördröjningar i nätverkskommunikationen hade, utan det var snarare den eventuellt uppfattade diskrepansen mellan spelarnas faktiska slutpoäng och den slutpoäng de annars trodde att de skulle få. Med andra ord så ville vi mäta hur consistency yttrade sig i sammanhanget. Detta gjorde vi genom att låta testpersonen få besvara ett antal frågor gällande deras slutpoäng i relation till deras insats. Upplevde spelaren att slutpoängen i en allt för stor grad avvek från det förväntade resultatet kunde det ses som en indikation på att spelet innehöll brister gällande consistency.

19

Page 25: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

3.2 Genomförandebeskrivning I samband med detta arbete har vi alltså utvecklat vår egen testmodell: ett enklare realtidsbaserat multiplayerspel helt och hållet baserat på HTML5 och JavaScript. Nedan följer en kortare beskrivning av spelets design och implementation.

Vi valde att designa ett tvådimensionellt sidscrollande endless runner-spel, dvs. en typ av tävlingsspel, utan given målgång där spelkaraktären inte förmår att förändra spelplanens färdriktning eller dess hastighet. Spelet består av i huvudsak tre delar: en scrollande bakgrund, spelkaraktärerna och en kontinuerlig ström av poänggivande spelföremål.

(Figur 11. Skärmdumpsbild tagen från testmodell)

Vår testmodell följer en eventdriven struktur. Eventdriven programmering är ett programmeringsparadigm där kontrollflödet av ett program kan agera dynamiskt genom att det hanteras med hjälp av events – dvs. olika händelser som programmet har instruerats att fånga upp och reagera på i en inte nödvändigtvis förutbestämd ordning (Roumeliotis, 2015). Dessa events kan exempelvis genereras när en

20

Page 26: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

användare interagerar med programmet genom musklick eller tangentnedtryckningar.

Spelaren interagerar med spelet med hjälp av datormus – eller med touchgester på de enheter som har stöd för detta. Vid varje interaktionstillfälle, dvs. då spelaren flyttar fingret eller muspekaren, genereras en virtuell markör, bestående av en x- och y-koordinat. Med den nya markören som slutmål animeras spelkaraktärens horisontella och vertikala hastighet tills dess att spelkaraktärens position sammanfaller med den hos den utsatta markören, eller det att en ny markör har genererats till följd av ytterligare interaktion.

Genom att alltid navigera spelkaraktärerna mot absoluta koordinater, och med hjälp av TCP-protokollets höga leveranssäkerhet, så avser vi upprätthålla en hög consistency mellan spelinstanserna.

I samband med att en ny markör skapas så skickas ett event och ett datapaket innehållande markörens koordinater till servern. Servern ser till att hålla de övriga klienterna uppdaterade genom att vidarebefordra den mottagna datan, denna kommunikation sker enligt full-duplex-principen där server och klient både lyssnar efter, och sänder ut event som indikerar att det skett en förändring i någon spelares position eller poäng.

Varje klient kontrollerar och uppdaterar sin lokala spelkaraktärs position i game loopen, dvs. ungefär 60 gånger per sekund, vilket i teorin ger en svarstid på cirka 17ms, och detta faller inom ramarna för vad en användare anser som en omedelbar reaktion enligt Nielsen (1993).

Eftersom WebSocket sker i full-duplex kan vi undvika onödig kommunikation mellan klient och server – vi implementerade en kontroll som hindrar klienten från att skicka positionen till servern om det inte skett en förändring. Den här typen av oregelbunden kommunikationsfrekvens hade inte varit möjligt med traditionell polling-teknik vilket bygger på att kommunikation sker efter ett givet intervall. Enligt våra experiment kunde vi minska antalet request till servern med ungefär 60% per spelomgång jämfört med att skicka positionen oavsett om spelaren flyttat sin karaktär eller inte.

21

Page 27: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

3.2.1 Designspecifikation

Här följer en övergripande beskrivning av de ramverk och kodbibliotek som vi har använt oss av under denna del av arbetet, samt vilka verktyg och tekniker vi har tillämpat.

3.2.1.1 AngularJS

Vi utvecklar klientsidan av applikationen i AngularJS, ett MVC-baserat JavaScript-ramverk utvecklat av Google (Angularjs.org, 2015). MVC är en förkortning av orden Model View Controller vilket är ett designmönster som används inom systemutveckling och närliggande områden. Designmönster ämnar kategorisera vanligt förekommande problem och dess lösningar vid utveckling av mjukvara. Syftet med MVC är upprätthållandet av en hållbar kod-struktur genom att separera koden efter tre specifika områden:

• Model – representerar datan i applikationen. Det kan ses som en beskrivning av datan som används – t.ex. Användare, Foto eller Anteckning (Osmani, 2012a).

• View – användargränssnittet i applikationen. Views har kännedom om modellernas existens och observerar dem, men kommunicerar inte direkt med dem (Osmani, 2012a).

• Controller – hanterar input från användaren (t.ex. klick och andra användarrelaterade händelser) och sköter uppdatering av modellerna. Applikationens views observerar modellerna och uppdaterar användargränssnittet när det skett en förändring (Osmani, 2012a).

AngularJS introducerar funktionalitet kallad Directives. Med Directives ger AngularJS oss möjligheten att kapsla in och isolera delar av applikationen och utöka HTML-språket med våra egna HTML-element. Det resulterar i ett mer semantiskt märkspråk, där vi kan själva kan namnge komponenter och attribut; själva spelet och alla bakomliggande logik kan inkapslas i ett ”game”-element; alla komponenter som utgör menyn kan isoleras i ett ”menu”-element etc. Det resulterar i en mer lättläst och överskådlig kod och gör att vi kan isolera applikationens olika komponenter, och samtidigt ha stor kontroll över hur de olika delarna kan kommunicera med varandra.

”The secret to building large apps is never build large apps. Break your applications into small pieces. Then, assemble those testable, bite-sized pieces into your big application” - Justin Meyer, author JavaScriptMVC (Osmani, 2012b)

22

Page 28: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

3.2.1.2 Phaser

Phaser är ett open source-baserat JavaScript-ramverk för att bygga spel för webbläsaren (Phaser.io, 2015). Även om det är fullt möjligt att själv koda de grundläggande delarna av en spelmotor i JavaScript så valde vi av tidsmässiga skäl att använda oss av ett befintligt ramverk, som i detta fall skulle visa sig bli Phaser. Med Phaser kunde vi snabbt komma igång och koda och bara fokusera på just de delarna som var relevanta för vår spelidé, istället för att först behöva bemöda oss med att implementera kringliggande logik såsom fysiksystem, animationssystem, bootloader, resurshanterare etc. Likt andra spelmotorer innehåller Phaser en så kallad game loop. Game loopen ansvarar för renderingsoperationer och exekvering av spel-logik genom de fördefinierade metoderna render respektive update. Update-metoden är inställd på att avfyras 60 gånger per sekund, och i den har vi bland annat lagt in koden för vårt kollisionssystem, förflyttning av spelkaraktären, uppdatering av poängställning, generering av spelföremål etc.

3.2.1.3 Socket.io

Trots att WebSocket är en standardiserad teknik kommer det aldrig att vara kompatibelt med de äldre webbläsare som fortfarande används (Rai 2013, s. 48). Socket.io fungerar som ett abstraktionslager för WebSocket och faller tillbaka på äldre tekniker när en webbläsare inte är kompatibelt med WebSocket. Socket.io ger oss ett ramverk för att hantera realtidskommunikation mellan server och webbläsare genom att erbjuda metoder för att skicka meddelanden och hantera event på båda sidor (Rai 2013, s. 49).

23

Page 29: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

3.2.1.4 Mongodb

MongoDB är en NoSQL dokumentorienterad databas utvecklad i C++ som sparar data i fält- och värdepar (Ningthoujam et al., 2014). I MongoDB sparas datan i formatet Binary JavaScript Object Notation (BSON) (Ningthoujam et al., 2014). Databasen är schemalös, vilket innebär att dokument som sparas kan ha ett varierat antal fält av varierande typ (Blog.mongodb.org, 2010). En schemalös databas är mycket flexibel och därmed snabb att anpassa och skala i takt med att applikationen förändras och växer (Hernandez, 2013). Vi använder oss av MongoDB för att lagra data relaterad till varje spelomgång. När spelarna startar spelet sparas det som ett dokument i databasen. När de sedan genomfört spelomgången och svarat på frågorna i vår enkätundersökning sparar vi resultatet i dokumentet som skapades vid spelstarten. Vi lagrar alla mätta latensvärden, spelarnas poäng, svar på frågorna etc. och kan sedan granska dem i vår lösenordsskyddade administratörspanel.

3.2.1.5 Express

Express är ett minimalistiskt ramverk för flexibla Node.js-applikationer (Keig 2013, s. 5). Det är inspirerat av Sinatra, ett ramverk för Ruby. Express tillhandahåller ett antal metoder tänkta att hjälpa utvecklaren att bygga applikationer och är ett av de mest populära webbutvecklingsramverken för Node.js (Keig 2013, s. 5).

24

Page 30: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

4 Resultat Här följer en presentation av resultatet efter våra tester i form av grafer. Y-axeln visar den loggade responstiden för det mättillfället och x-axeln visar den fortlöpta tiden i sekunder för den spelomgången. Testpersonen representeras av röd färg i grafen. Varje test inleds genom att vi förser testpersonen med ett antal generella instruktioner om spelet och testet i sig, testpersonen får sedan bekanta sig med spelmekanikerna genom att spela en uppvärmningsrunda. När testpersonen uppger att han eller hon är redo så genomförs en skarp spelomgång. En testperson spelar aldrig direkt mot någon annan testperson, utan istället har vi en dedikerad kontrollspelare – representeras av blå färg i grafen – som agerar motståndare. Detta för att vi ska kunna försäkra oss om så pass uniforma förhållanden för testerna som möjligt. Efter att varje spelomgång har avslutas så presenteras testpersonen med en kort enkät där de tillåts värdera det upplevda spelförhållandet.

4.1 Fjärrvärd

(Figur 12. Resultat fjärrvärd: Testperson 1)

Testperson 1

Medelvärde: 161ms

Hur upplevde du att nätverket fungerade?

4. Enbart små problem noterades. Väldigt bra miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

25

Page 31: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 13. Resultat fjärrvärd: Testperson 2)

Testperson 2

Medelvärde: 159ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

(Figur 14. Resultat fjärrvärd: Testperson 3)

Testperson 3

Medelvärde: 140ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

26

Page 32: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 15. Resultat fjärrvärd: Testperson 4)

Testperson 4

Medelvärde: 149ms

Hur upplevde du att nätverket fungerade?

3. Klart nedsatt miljö, men ändå acceptabel.

Tycker du att slutpoängen verkade stämma?

Nej

Om du svarade nej på föregående fråga: Vad stämde inte?

Min motspelares poäng var högre än förväntat.

(Figur 16. Resultat fjärrvärd: Testperson 5)

Testperson 5 Medelvärde: 153ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

27

Page 33: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

4.2 Lokal värd

(Figur 17. Resultat lokal värd: Testperson 1)

Testperson 1

Medelvärde: 13ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

(Figur 18. Resultat lokal värd: Testperson 2)

Testperson 2

Medelvärde: 28ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

28

Page 34: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Om du svarade nej på föregående fråga: Vad stämde inte?

(Figur 19. Resultat lokal värd: Testperson 3)

Testperson 3

Medelvärde: 24ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

29

Page 35: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

(Figur 20. Resultat lokal värd: Testperson 4)

Testperson 4

Medelvärde: 35ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

(Figur 21. Resultat lokal värd: Testperson 5)

Testperson 5

Medelvärde: 23ms

Hur upplevde du att nätverket fungerade?

5. Inga problem. Perfekt miljö.

Tycker du att slutpoängen verkade stämma?

Ja

Om du svarade nej på föregående fråga: Vad stämde inte?

30

Page 36: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

5 Diskussion Om vi tolkar de grafer som presenteras av Dick, Wellnitz och Wolf i deras studie (2005, s. 5) så visar de att spelen i deras undersökning ligger på acceptabla värden (MOS = 3) vid latenstider upp till cirka 150ms. Våra resultat visar på en genomsnittlig latens på 152,4ms på fjärrvärden och 24,6ms på den lokala miljön. Om vi bara skulle ha utgått ifrån deras resultat och tillämpat det som ett slags ramverk så hade vi kunnat konstatera att båda våra servermiljöer – i alla fall i teorin – tillhandahåller tillräckligt bra responsetider för att spelmiljöerna fortfarande skulle anses som godtagbara.

Om vi istället tittar på Gerla et al. (2012) konstaterar de att de redan vid latenstider så låga som 50ms kunde se en tydligt negativ påverkan på spelares prestationer. Här skiljer sig alltså resultaten mellan de bägge studierna i fråga om vilka latenstider som går att betrakta som acceptabla.

Det förefaller sig därför som att det inte existerar ett definitivt gränsvärde som kan appliceras på alla spel vad gäller latenstider, istället tycks det existera ett antal kontextuella komponenter som spelar in här. Vi kan därför spekulera i att faktorer som exempelvis spelarens erfarenhet, spelets hastighet, bakomliggande latenskompenserande algoritmer etc. är relevanta i sammanhanget. Detta styrks av Dick, Wellnitz och Wolf (2005, s. 7):

We found out that various multiplayer games behave differently under the same network conditions. While this is common knowledge today, our results suggest that this statement is even true for games of the same category such as first person shooters. Skill, latency and jitter generally can have a large but also game-dependant influence on a good game quality.

Ser vi däremot till våra faktiska MOS-värden så kan vi fastslå att vi ligger på ett genomsnittligt MOS-värde på 4,4 på fjärrvärden, vilket innebär en miljö som är att betrakta som någonstans mellan "väldigt bra" och "perfekt", detta gick emot våra tidigare förväntningar av multiplayerupplevelsen på fjärrvärden. Den lokala miljön har, som vi tidigare antog, ideala nätverksförhållanden och därmed ett genomsnittligt MOS-värde på 5,0.

När det gäller fjärrvärden så kan det också vara intressant att notera att tre av fem testpersoner inte upplevde att de förekom någon direkt skillnad i nätverksförhållandet mellan de bägge testmiljöerna, de uppgav alltså ett MOS-värde på fem vid respektive spelomgång. I själva verket så hade fjärrvärden en genomsnittlig latens som var drygt sex gånger så hög som genomsnittet på den

31

Page 37: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

lokala miljön. Vad detta beror på i just våra testfall är svårt att fastställa men vi kan anta att det kan ha en av följande förklaringar: testpersonerna är inte tillräckligt bekanta med spelet för att kunna uppfatta så små skillnader, alternativt kan det vara så att spelet och dess mekaniker inte är tillräckligt avancerade och att det därför blir svårt att notera den eventuella negativa inverkan som den givna latensen hade.

Vi ser dessutom att de två testpersoner som satt ett lägre MOS-värde än fem varit skeptiska till den faktiska slutpoängen. De ansåg båda två att motspelarens poäng varit högre än vad de förväntat sig utifrån det som skett i deras instans av spelet. Detta fenomen uppstår med största sannolikhet pga. fördröjningar i de poänggivande föremålen som genereras på servern; om det poänggivande föremålets koordinater skiljer sig mellan de olika spelinstanserna så kan det uppstå ett scenario där varje klient tilldelas poäng för ett och samma föremål. I nuläget är det svårt för oss att fastställa om detta enbart beror på de ökade latenstiderna som fjärrvärden medförde, eller om problemet har med vår implementation av poängsystemet att göra.

De toppar som vi ser i graferna beror enligt våra teorier till stor del på TCP-protokollets inbyggda leveranskontroll. Servern förväntar sig en leveransbekräftelse från klienten för varje paket som den har skickat, får den inte det så återupprepar servern processen och försöker skicka paketet på nytt, detta innebär att sändningen av efterföljande paket i data-kön sinkas i vad som skulle kunna liknas vid en trafikstockning. Vi antar därför att detta skulle kunna undvikas med hjälp av ett alternativt protokoll som UDP, vilket inte genomför den ovan nämnda leveranskontrollen av paket. I stället fokuserar UDP på att hålla dataströmmen flytande och ser leveransen av paket som verkställd i samma ögonblick som det har skickats. På detta vis undviks eventuella trafikstockningar, detta sker dock på bekostnad av konsekventa och synkrona leveranser. Det kan därför vara rimligt att anta att protokollet UDP medför en högre interaktivitet med sin höga överföringshastighet, medan TCP istället ger en högre consistency med den inbyggda leveranskontrollen.

32

Page 38: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

6 Slutsats Enligt de resultat kring godtagbara responstider som framlagds av den tidigare forskning vilket vi presenterat i detta arbete så drar vi slutsatsen att det inte går att fastställa ett definitivt gränsvärde som kan appliceras i alla utfall, utan det skiljer sig från spel till spel.

Det är först då vi har använt oss av en subjektiv värderingsskala så som Mean Opinion Score (MOS) i samband med våra övriga mätvärden som vi har kunnat konstatera att vi uppnått ett tillfredställande resultat vad gäller det enkla plattformspel som vi har utvecklat. Utifrån detta drar vi således den slutstatsen att det med Node.js och WebSocket är möjligt att leverera en acceptabel multiplayerupplevelse för realtidsbaserade spel av den beskaffenhet som utgör vår testmodell.

33

Page 39: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Källförteckning Apache.org, (2015). Apache MPM Common Directives. [Elektronisk] Tillgänglig: http://httpd.apache.org/docs/2.0/mod/mpm_common.html#maxclients [21 May 2015].

Angularjs.org, (2015). AngularJS — Superheroic JavaScript MVW Framework. [Elektronisk] Tillgänglig: https://angularjs.org [26 May 2015].

Bergström, S. (2012). Real Time Multiplayer in HTML5 - Build New Games. [Elektronisk] Buildnewgames.com. Tillgänglig: http://buildnewgames.com/real-time-multiplayer/ [26 May 2015].

Bijin Chen, and Zhiqi Xu, (2011). A framework for browser-based Multiplayer Online Games using WebGL and WebSocket. [Elektronisk] International Conference on Multimedia Technology. p. 471 - 474 Tillgänglig: IEEE [2015-05-18]. DOI: 10.1109/ICMT.2011.6001673

Blog.mongodb.org, (2010). MongoDB.org Community Blog. [Elektronisk] Tillgänglig: http://blog.mongodb.org/post/119945109/why-schemaless [26 May 2015].

Chaniotis, I., Kyriakou, K. och Tselikas, N. (2014). Is Node.js a viable option for building modern web applications? A performance evaluation study. [Elektronisk] Computing Tillgänglig: Springer Vienna [2015-05-18]. DOI: 10.1007/s00607-014-0394-9

Crockford, D. (2008). JavaScript The good parts. Farnham: O'Reilly.

Crockford, D. (2015). JavaScript: The World's Most Misunderstood Programming Language. [Elektronisk] Javascript.crockford.com. Tillgänglig: http://javascript.crockford.com/javascript.html [2015-05-06].

DeCausemaker, R. (2014). JavaScript talk by Kyle Simpson, known as getify [Elektronisk] Opensource.com. Tillgänglig: http://opensource.com/life/14/11/talk-kyle-simpson-javascript-expert [31 Aug. 2015].

Denscombe, M. (2010). Good Research Guide : For small-scale social research projects (4th Edition) [Elektronisk] McGraw-Hill Education Tillgänglig: ProQuest [26 May 2015].

Dick, M., Wellnitz, O. and Wolf, L. (2005). Analysis of factors affecting players' performance and perception in multiplayer games. [Elektronisk] Proceedings of 4th ACM SIGCOMM workshop on Network and system support for games. p. 1 - 7 Tillgänglig: ACM [2015-05-18]. DOI: 10.1145/1103599.1103624

34

Page 40: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Dixit, S. (2012). An Introduction To WebSockets - JavaScript tutorial - developer Fusion. [Elektronisk] Developerfusion.com. Tillgänglig: http://www.developerfusion.com/article/143158/an-introduction-to-websockets/ [23 May 2015].

Erbad, A., Hutchinson, N. and Krasic, C. (2012). DOHA: scalable real-time web applications through adaptive concurrent execution [Elektronisk] WWW '12 Proceedings of the 21st international conference on World Wide Web. p. 161-170 Tillgänglig: ACM [2015-05-18]. DOI: 10.1145/2187836.2187859

Fuscata (2015). How To Set MaxClients in Apache/prefork. [Elektronisk] Tillgänglig: http://fuscata.com/kb/set-maxclients-apache-prefork [21 May 2015].

Gerla, M. Maggiorini, D., Palazzi, C. and Bujari, A. (2012). A survey on interactive games over mobile networks. [Elektronisk] Wireless Communications and Mobile Computing p. 212-229 Tillgänglig: Wiley [2015-05-18]. DOI: 10.1002/wcm.2197

Hansen, C. Jurgens, N., Makaroff, D., Callele, D. and Dueck, P. (2013). Network performance measurement framework for real-time multiplayer mobile games. [Elektronisk] 2013 12th Annual Workshop on Network and Systems Support for Games (NetGames) Tillgänglig: IEEE Press [2015-05-18]. DOI: 10.1002/wcm.2197

Hansen, P. (1978). DOHA: scalable real-time web applications through adaptive concurrent execution [Elektronisk] Communications of the ACM p. 934-941 Tillgänglig: ACM [2015-05-18].

Hernandez, A. (2013). An Introduction To Full-Stack JavaScript. [Elektronisk] Smashingmagazine.com. Tillgänglig: http://www.smashingmagazine.com/2013/11/21/introduction-to-full-stack-javascript/ [26 May 2015].

id Software (1999). Quake III Arena. Activision. (Microsoft Windows, Linux, Mac OS, Dreamcast, Playstation 2, Xbox Live Arcade, IOS).

Keig, A. (2013). Advanced Express Web Application Development. 1st ed [Elektronisk] Packt Publishing. Tillgänglig: Ebrary [26 May 2015].

Koenig, J. (2013). The History of Website Development. [Elektronisk] Pantheon. Tillgänglig: https://pantheon.io/blog/history-website-development-infographic [31 Aug. 2015].

Kushal, D. (2015). Apple’s App Store review process is hurting users, but we’re not allowed to talk about it. [Elektronisk] Business Insider. Tillgänglig: http://www.businessinsider.com/apples-app-store-review-process-is-hurting-users-but-were-not-allowed-to-talk-about-it-2015-4?IR=T [31 Aug. 2015].

35

Page 41: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Lohr, S. (1996). Part Artist, Part Hacker And Full-Time Programmer. [Elektronisk] Nytimes.com. Tillgänglig: http://www.nytimes.com/1996/09/09/business/part-artist-part-hacker-and-full-time-programmer.html [31 Aug. 2015].

Lubbers, P. and Greco, F. (2010). HTML5 Web Sockets: A Quantum Leap in Scalability for the Web | Microservices Journal. [Elektronisk] Soa.sys-con.com. Tillgänglig: http://soa.sys-con.com/node/1315473 [22 May 2015].

Mastering Nodejs (2015). Ryan Dahl: Original Node.js presentation. [video online] Tillgänglig: https://www.youtube.com/watch?v=U8TGJhQtEtM [21 May 2015].

Morrison V, (2005). Concurrency: What Every Dev Must Know About Multithreaded Apps. [Elektronisk] Tillgänglig: https://msdn.microsoft.com/en-us/magazine/cc163744.aspx [2015-05-06].

Nielsen, J. (1993). Response Times: The 3 Important Limits [Elektronisk] Nngroup.com. Tillgänglig: http://www.nngroup.com/articles/response-times-3-important-limits/ [18 Aug. 2015].

Nielsen, J. (2000). Why You Only Need to Test with 5 Users. [Elektronisk] Nngroup.com. Tillgänglig: http://www.nngroup.com/articles/why-you-only-need-to-test-with-5-users/ [24 May 2015].

Nieva, R. (2015). Adobe Flash's newest enemy: Google. [Elektronisk] Cnet Tillgänglig: http://www.cnet.com/news/adobe-flashs-newest-enemy-google/ [9 Sep. 2015].

Ningthoujam, S., Choudhury, M., Potsangbam, K., Chetia, P., Nahar, L., Sarker, S., Basar, N. and Talukdar, A. (2014). NoSQL Data Model for Semi-automatic Integration of Ethnomedicinal Plant Data from Multiple Sources. [Elektronisk] Phytochemical Analysis vol. 25:6 p. 495-507 Tillgänglig: Wiley [2015-05-18]. DOI: 10.1002/pca.2520

Npd.com, (2015). Mobile Gaming Consumer Trends in 2014 - npd.com. [Elektronisk] Tillgänglig: https://www.npd.com/wps/portal/npd/us/news/press-releases/2015/average-time-spent-playing-games-on-mobile-devices-has-increased-57-percent-since-2012/ [9 May 2015].

Mozilla Developer Network, (2015a). WebGL. [Elektronisk] Tillgänglig: https://developer.mozilla.org/en-US/docs/Web/WebGL [26 May 2015].

Mozilla Developer Network, (2015b). canvas. [Elektronisk] Tillgänglig: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas [26 May 2015].

36

Page 42: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

O'Reilly (2013). Brendan Eich on JavaScript at 18: Legal to Gamble - Fluent 2013. [video online] Tillgänglig: https://www.youtube.com/watch?v=qrf9ONmtXbM [21 May 2015].

O'Reilly, T. (2007). What is Web 2.0: Design patterns and business models for the next generation of software. [Elektronisk] O'Reilly Network. Tillgänglig: http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html.

Oracle, (2015). I/O Streams (The Java™ Tutorials > Essential Classes > Basic I/O). [Elektronisk] Oracle.com Tillgänglig: https://docs.oracle.com/javase/tutorial/essential/io/streams.html [31 Aug. 2015].

Osmani, A. (2012). Patterns For Large-Scale JavaScript Application Architecture. [Elektronisk] Addyosmani.com. Tillgänglig: http://addyosmani.com/largescalejavascript/ [23 Nov. 2014].

Pace Creative, (2015). The Evolution of Web Design. [Elektronisk] Tillgänglig: http://pacedigitalstudios.com/blog/design/evolution-web-design/ [31 Aug. 2015].

Park, J., Hwang, H., Yun, J. and Moon, I. (2014). Research and Performance Analysis of HTML5 WebSocket for a Real-time Multimedia Data Communication Environment. [Elektronisk] Advanced Science and Technology Letters vol. 46 p. 307-312 Tillgänglig: Onlinepresent [2015-05-18]. DOI: 10.14257/astl.2014.46.64

Phaser.io, (2015). Phaser - A fast, fun and free open source HTML5 game framework. [Elektronisk] Tillgänglig: http://phaser.io [26 May 2015].

Pimentel, V. and Nickerson, B. (2012). Communicating and Displaying Real-Time Data with WebSocket. [Elektronisk] IEEE Internet Computing, 2012 vol. 16:4 p. 45-53 Tillgänglig: IEEE [2015-05-18]. DOI: 10.1109/MIC.2012.64

Rai, R. (2013). Socket.io Real-time Web Application Development. [Elektronisk] Birmingham: Packt Pub. Tillgänglig: Ebrary [26 May 2015].

Riihonen, T., Werner, S. and Wichman, R. (2011). Hybrid Full-Duplex/Half-Duplex Relaying with Transmit Power Adaptation. [Elektronisk] IIEEE Transactions on Wireless Communications vol. 10:9 p. 3074-3085 Tillgänglig: IEEE [2015-05-18]. DOI: 10.1109/TWC.2011.071411.102266

Roumeliotis, R. (2015). Variations in event-driven architecture [Elektronisk] Radar.oreilly.com. Tillgänglig: http://radar.oreilly.com/2015/02/variations-in-event-driven-architecture.html [31 Aug. 2015].

Schmid, O., Lisowska Masson, A. and Hirsbrunner, B. (2013). Real-time collaboration through web applications: an introduction to the Toolkit for Web-based Interactive

37

Page 43: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

Collaborative Environments (TWICE). [Elektronisk] Pers Ubiquit Comput, 18(5), pp.1201-1211 Tillgänglig: Springer Link [2015-02-18]. DOI: 10.1007/s00779-013-0729-0

Shuhao, L., Wei, B., Hong, X., Kai, C. and Zhiping, C. (2015). RepNet: Cutting Tail Latency in Data Center Networks with Flow Replication. [Elektronisk] Department of Computer Science, City University of Hong Kong [2015-05-18].

Stanley, P. (2015). Advantages of Web Applications. [Elektronisk] Pssuk.com. Tillgänglig: http://www.pssuk.com/AdvantagesWebApplications.htm [31 Aug. 2015].

Strowes, S. (2013). Passively measuring TCP round-trip times. Commun. ACM, 56(10), p.57.

Taman, M. (2014). Yeah, TRUE real time web applications, no more hacks (a hack session). [video online] Available at: https://www.youtube.com/watch?v=YcuWlZveP_Q [Accessed 16 May 2015].

Tilkov, S. och Vinoski, S. (2010). Node.js: Using JavaScript to Build High-Performance Network Programs. [Elektronisk] Ieee Internet Computing. vol. 14:6 p. 80-83 Tillgänglig: IEEE [2015-02-18]. DOI: 10.1109/MIC.2010.145

Vanguardsw.com (2015). Compiled vs. Interpreted Languages. [Elektronisk] Tillgänglig: http://www.vanguardsw.com/dphelp4/dph00296.htm [Accessed 5 Sep. 2015].

W3techs.com, (2015). Usage Statistics and Market Share of Server-side Programming Languages for Websites. [Elektronisk] W3techs Tillgänglig: http://w3techs.com/technologies/overview/programming_language/all [31 Aug. 2015].

Wolf, J. (2013). Responsive HTML5 Apps: Write Once, Run Anywhere? Where is Anywhere? [Elektronisk] Wired. Tillgänglig: http://www.wired.com/insights/2013/11/responsive-html5-apps-write-once-run-anywhere-where-is-anywhere/ [31 Aug. 2015].

YUI Library (2011). Douglas Crockford: The JavaScript Programming Language. [video online] Tillgänglig:https://www.youtube.com/watch?v=v2ifWcnQs6M [21 May 2015].

38

Page 44: Multiplayerupplevelse i webbapplikationer utvecklade med ...hv.diva-portal.org/smash/get/diva2:858818/FULLTEXT01.pdfOur research has led us to conclude that there is no definitive

HÖGSKOLAN VÄST Institutionen för ekonomi och IT Avdelningen för medier och design 461 86 TROLLHÄTTAN Tel 0520-22 30 00 www.hv.se

39