uporaba spletnih tehnologij za izdelavo realno … · i uporaba spletnih tehnologij za izdelavo...

44
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Matej Lubej UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO-ČASOVNE SPLETNE APLIKACIJE Diplomsko delo Maribor, september 2016

Upload: others

Post on 21-May-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO,

RAČUNALNIŠTVO IN INFORMATIKO

Matej Lubej

UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO-ČASOVNE SPLETNE

APLIKACIJE

Diplomsko delo

Maribor, september 2016

Page 2: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,
Page 3: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO

REALNO-ČASOVNE SPLETNE APLIKACIJE

Diplomsko delo

Študent: Matej Lubej

Študijski program: Univerzitetni študijski program

Računalništvo in informacijske tehnologije

Mentor: doc. dr. Milan Ojsteršek, univ. dipl. inž. el.

Somentor: asist. Marko Ferme, univ. dipl. inž. rač. in inf.

Lektor: Andraž Gradišnik, univ. dipl. slov. in angl.

Page 4: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Zahvala

Zahvaljujem se mentorju dr. Milanu Ojsteršku in somentorju asist. Marku

Fermetu za pomoč in vodenje pri pripravljanju diplomskega dela.

Posebej se zahvaljujem tudi staršem, ki so mi omogočili študij in nudili

podporo skozi celoten študij.

Page 5: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

i

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

Ključne besede: spletna aplikacija, spletne tehnologije, večigralska spletna igra Sudoku,

Node.js, Three.js, WebGL

UDK: 004.777.031.43(043.2)

Povzetek

V diplomskem delu smo predstavili kako izdelati spletno aplikacijo, ki omogoča realno-

časovno komunikacijo preko spleta. Primer uporabe realno-časovne komunikacije smo

demonstrirali pri izdelavi aplikacije večigralske igre Sudoku. Sočasno z ustvarjanjem

aplikacije smo hoteli raziskati spletno grafično knjižico WebGL z uporabo knjižice Three.js.

Node.js in njegove module smo uporabili na strežniški strani, na odjemalčevi strani pa

standardne tehnologije HTML, CSS3 in JS z uporabo ogrodja Bootstrap.

Page 6: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

ii

Use of web technologies for real-time web application

Key words: web application, web technologies, Sudoku multiplayer web game, Node.js,

Three.js, WebGL

UDK: 004.777.031.43(043.2)

Abstract

The thesis presents the development of a real-time communication web application. In the

practical part we demonstrate the real-time communication in a multiplayer Sudoku game.

We also present the graphic library WebGL using the Three.js library. The Node.js

environment and its modules were used for the server-side. Standard web technologies

such as HTML, CSS3, Javascript and Bootstrap framework were used for the client-side.

Page 7: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

iii

Kazalo vsebine

1 UVOD ........................................................................................................................................ 1

2 REALNO-ČASOVNE SPLETNE APLIKACIJE .................................................................... 2

2.1 Tehnologije in pristopi.................................................................................................................... 2

2.1.1 AJAX polling ...................................................................................................................................... 2

2.1.2 Vtičniki ............................................................................................................................................. 2

2.1.3 Comet ............................................................................................................................................... 3

2.1.4 Websocket ....................................................................................................................................... 3

3 SPECIFIKACIJE PROJEKTA................................................................................................. 4

3.1 Izbira tehnologije ........................................................................................................................... 4

3.2 Uporabljene tehnologije................................................................................................................. 4

3.2.1 Node.js ............................................................................................................................................. 6

3.2.2 MongoDB ......................................................................................................................................... 8

3.2.3 Mongoose ........................................................................................................................................ 9

3.2.4 Ogrodje za predloge ....................................................................................................................... 10

3.2.5 Socket.io ......................................................................................................................................... 11

3.2.6 PleaseWait.js .................................................................................................................................. 13

3.2.7 Bootstrap ....................................................................................................................................... 14

3.2.8 Bootstrap »material design«.......................................................................................................... 15

3.2.9 Three.js .......................................................................................................................................... 16

3.3 Izbira spletnega strežnika ............................................................................................................. 18

3.3.1 Heroku ........................................................................................................................................... 18

3.4 Izdelava aplikacije ........................................................................................................................ 20

3.4.1 Generiranje Sudoku igre ................................................................................................................ 21

3.4.2 Reševanje igre Sudoku ................................................................................................................... 23

3.4.3 Večigralski Sudoku ......................................................................................................................... 25

4 ZAKLJUČEK .......................................................................................................................... 31

5 VIRI ........................................................................................................................................ 32

Page 8: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

iv

Kazalo tabel TABELA 1: UPORABLJENE TEHNOLOGIJE ........................................................................................................... 5

TABELA 2: SEZNAM ODVISNOSTI ....................................................................................................................... 7

Kazalo slik SLIKA 1: OSNOVNA STRUKTURA GENERATORJA EXPRESS ................................................................................. 6

SLIKA 2: PONUDBA MLABA ................................................................................................................................ 9

SLIKA 3 JADE V PRIMERJAVI S HTML................................................................................................................ 11

SLIKA 4: ANIMACIJA NALAGANJA .................................................................................................................... 14

SLIKA 5: ENOSTAVEN OBRAZEC, NAREJEN Z BOOTSTRAPOM ......................................................................... 14

SLIKA 6: ENOSTAVEN OBRAZEC, NAREJEN SAMO Z UPORABO HTML ............................................................. 14

SLIKA 7: BOOTSTRAP ZAPRTO MODALNO OKNO ............................................................................................ 15

SLIKA 8: BOOTSTRAP ODPRTO MODALNO OKNO ........................................................................................... 15

SLIKA 9: BOOTSTRAP-MATERIAL-DESIGN PRAZNO VNOSNO POLJE ................................................................ 16

SLIKA 10: BOOTSTRAP-MATERIAL-DESIGN NEPRAZNO VNOSNO POLJE ......................................................... 16

SLIKA 11: BOOTSTRAP-MATERIAL-DESIGN GUMB........................................................................................... 16

SLIKA 12: BOOTSTRAP-MATERIAL-DESIGN STISNJEN GUMB ........................................................................... 16

SLIKA 13: ROTACIJA SUDOKUJA ....................................................................................................................... 17

SLIKA 14: IDEJA SPLETNEGA PONUDNIKA STREŽNIŠKIH STORITEV HEROKU ................................................... 18

SLIKA 15: REZULTAT INICIALIZACIJE HEROKU PROJEKTA ................................................................................. 19

SLIKA 16: USPEŠEN PRENOS NA STREŽNIK ...................................................................................................... 19

SLIKA 17: HEROKU DEMO PROJEKT ................................................................................................................. 20

SLIKA 18: GENERIRAN SUDOKU IZ WIKIPEDIJE ................................................................................................ 21

SLIKA 19: PRISTOP WEBGL ............................................................................................................................... 25

SLIKA 20: PRISTOP CSS3 ................................................................................................................................... 26

SLIKA 21: SUDOKU: POVABI PRIJATELJA .......................................................................................................... 26

SLIKA 22: SUDOKU: POTRDITEV ZAČETKA IGRE ............................................................................................... 27

SLIKA 23: SUDOKU: ZAKLJUČEK IGRE ............................................................................................................... 27

SLIKA 24: ENONITNO ASINHRONO DELOVANJE NODE.JS ................................................................................ 28

Kazalo izvornih kod KODA 1: UPORABA GENERATORJA EXPRESS ..................................................................................................... 6

KODA 2: JSON VSEBINA 'PACKAGE.JSON' DATOTEKE ........................................................................................ 7

KODA 3: NAMESTITEV VSEH ODVISNOSTI ......................................................................................................... 8

KODA 4: POGANJANJE LOKALNE MONGODB INSTANCE ................................................................................... 8

KODA 5: POVEZOVALNI NIZ DO PODATKOVNE BAZE ........................................................................................ 8

Page 9: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

v

KODA 6: POVEZOVALNI NIZ DO MLAB-OVE PODATKOVNE BAZE ...................................................................... 9

KODA 8: MODEL UPORABNIKA ........................................................................................................................ 10

KODA 9: USTVARJANJE NOVEGA UPORABNIKA .............................................................................................. 10

KODA 10: NAMESTITEV SOCKET.IO ................................................................................................................. 11

KODA 11: VKLJUČITEV SOCKET.IO NA ODJEMALČEVI STRANI ......................................................................... 12

KODA 12: IZSEK KODE SOCKET.IO NA ODJEMALČEVI STRANI.......................................................................... 12

KODA 13: METODA 'LOAD' NA STREŽNIŠKI STRANI ......................................................................................... 13

KODA 14: PLEASEWAIT.JS ANIMACIJA ............................................................................................................. 13

KODA 15: PREKINITEV ANIMACIJE ................................................................................................................... 13

KODA 16: THREE.JS KOCKA V PROSTORU ........................................................................................................ 17

KODA 17: INICIALIZACIJA GIT ........................................................................................................................... 18

KODA 18: DODAJANJE KODE V LOKALNI REPOZITORIJ .................................................................................... 19

KODA 19: INICIALIZACIJA HEROKU PROJEKTA ................................................................................................. 19

KODA 20: SHRANJEVANJE V LOKALNI REPOZITORIJ IN PRENOS NA STREŽNIK HEROKU ................................. 19

KODA 21: ODPRTJE HEROKU APLIKACIJE ......................................................................................................... 20

KODA 22: METODA 1 ZA GENERIRANJE SUDOKUJA ........................................................................................ 21

KODA 23: METODA 2 ZA GENERIRANJE SUDOKUJA ........................................................................................ 22

KODA 24: METODA 4 ZA GENERIRANJE SUDOKUJA ........................................................................................ 22

KODA 25: GENERIRANJE SUDOKUJA ................................................................................................................ 23

KODA 26: ISKANJE PRAZNEGA POLJA .............................................................................................................. 24

KODA 27: REŠEVANJE KVADRATA Z DIMENZIJAMI 3 X 3 ................................................................................. 24

KODA 28: REŠEVANJE STOLPCA Z DIMENZIJAMI 1 X 9 .................................................................................... 24

KODA 29: PREVERITEV, ALI OBSTAJA REŠITEV ZA PRAZNO POLJE ................................................................... 25

KODA 30: ZAKLENI POLJE ................................................................................................................................. 29

KODA 31: ZAKLENI POLJE NA STREŽNIŠKI STRANI ........................................................................................... 29

KODA 32: ZAKLENI PRIDOBLJENO POLJE ......................................................................................................... 29

KODA 33: POŠLJI SPOROČILO .......................................................................................................................... 30

Page 10: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

vi

SEZNAM UPORABLJENIH KRATIC AJAX - Asynchronous JavaScript and XML

NPM – Node package manager

3D – Three-Dimensional

I/O – Input/output

MIT – Massachusetts Institute of Technology

MVC – Model–view–controller

JSON – JavaScript Object Notation

SQL – Structured Query Language

NoSQL – Non SQL

MS – Microsoft

ORM – Object-relational mapping

DOM – Document Object Model

HTML – Hyper Text Markup Language

CSS – Cascading Style Sheets

JS – JavaScript

FOV - Field of view

IoT - Internet of things

IaaS – Infrastructure as a Service

OS – Operating system

SSH – Secure Shell

URL – Uniform Resource Locator

px – Pixel

Page 11: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,
Page 12: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

1

1 UVOD

Spletne tehnologije so ena izmed najpomembnejših in najbolj razvijajočih se področij v

računalništvu, saj nam omogočajo da lažje razvijamo spletne in hibridne aplikacije, ki se

izvajajo na različnih napravah in operacijskih sistemih. Razvoj je od statičnih spletnih strani

prešel na dinamične spletne strani, ki ponujajo interakcijo uporabnikov s spletnim

strežnikom. Da bi bila uporabniška izkušnja tekoča, se je pojavila potreba po tehnologijah,

ki omogočajo komunikacijo med uporabniki v realnem času. V osnovi spletne tehnologije

niso bile grajene za sinhrono komunikacijo med brskalnikom in strežnikom. Šele s prihodom

HTML5 se je uveljavila tehnologija Websocket, ki je ena izmed tehnologij, ki omogoča

asinhrono komunikacijo. Strežniška tehnologija Node.js se s tehnologijo Websocket dobro

ujame, saj omogoča razširljivost in stroškovno učinkovitost.

S prihodom HTML5 se je uveljavila grafična spletna knjižica WebGL, ki omogoča

kompleksen izris 3D grafičnih elementov s strojnim pospeševanjem. Deluje brez

nameščanja vtičnikov, kar je hkrati njena velika prednost.

Za demonstracijo delovanja zgoraj omenjenih tehnologij smo se odločili, da v praktičnem

delu diplomske naloge izdelamo spletno aplikacijo, ki bi vsaj delno vsebovala WebGL.

Sklenili smo, da v aplikacijo vključimo realno-časovne storitve. Kot primer takšne aplikacije

smo izdelali večigralsko igro Sudoku, v kateri igralca med sabo komunicirata v realnem

času. Za uporabniški vmesnik aplikacije smo uporabili tehnologijo WebGL.

V drugem poglavju diplomskega dela smo opisali nekaj tehnologij oz. pristopov, ki se

uporabljajo za načrtovanje realno-časovnih aplikacij. V naslednjem poglavju smo opisali,

katere tehnologije smo izbrali za razvijanje aplikacije, in kako smo aplikacijo postavili na

spletni strežnik. V zadnjem delu tega poglavja smo predstavili celoten razvoj aplikacije,

hkrati pa opisali glavne težave, ki smo jih imeli med razvojem.

Page 13: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

2

2 REALNO-ČASOVNE SPLETNE APLIKACIJE

Realno-časovne spletne aplikacije omogočajo realno-časovno komunikacijo med spletnim

strežnikom in njegovimi odjemalci. Enostaven primer realno-časovne spletne aplikacije je

npr. klepet. V klepetu sodelujeta vsaj dva uporabnika, ki si med seboj izmenjujeta sporočila.

V realno-časovni aplikaciji prejemnik dobi sporočilo takoj, ko ga pošiljatelj pošlje. Pri

standardni spletni aplikaciji bi morala aplikacija vsake toliko časa poslati zahtevo na strežnik

oz. vir in preveriti, ali je prišlo novo sporočilo. Bolj kompleksen primer realno-časovne

spletne aplikacije je večuporabniško realno-časovno urejanje dokumentov. Problem

spletnih realno-časovnih aplikacij je v tem, da protokol HTTP temelji na načinu delovanja

zahteva/odziv, zato strežnik nima načina, da bi informacijo kadarkoli poslal odjemalcu.

Odjemalec je tako načeloma obveščen le ob pošiljanju zahteve. Nastalo je nekaj pristopov,

ki so to omejitev protokola HTTP hoteli zaobiti (AJAX pooling, vtičniki, Comet), in pa nov

protokol Websocket, ki učinkovito rešuje težavo realno-časovnih aplikacij.

2.1 Tehnologije in pristopi

Poznamo več tehnologij in pristopov za aplikacije, ki omogočajo realno-časovno

komunikacijo odjemalcev s spletnim strežnikom. V nadaljevanju bomo našteli nekaj najbolj

znanih, izpostavili pa bomo tudi tistega, ki smo ga izbrali za načrtovanje naše aplikacije.

2.1.1 AJAX polling

Ajax polling [16] ni pravi realno-časovni pristop. Ta pristop se uporablja tako, da se na

časovni interval, npr. 20 sekund, pošiljajo klici AJAX, kjer strežnik v odgovoru pošlje

spremembe. Ta pristop za načrtovanje naše aplikacije ni idealen, saj bi posodobitve lahko

prejemali samo na časovni interval – zato ga nismo uporabili.

2.1.2 Vtičniki

Vtičnika Java in Flash prav tako omogočata realno-časovno komunikacijo odjemalca s

spletnim strežnikom, vendar se zaradi varnostnih lukenj veliko manj uporabljata. Spletni

brskalniki ukinjajo podporo dodatnih vtičnikov in dajejo prednost standardu HTML5.

Page 14: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

3

2.1.3 Comet

Comet je spletni model za realno-časovne spletne aplikacije [1, 16]. Za svoje delovanje

uporablja standardni JavaScript in protokol HTTP, zato ga je lažje omogočiti v spletni

aplikaciji. Obstaja več različnih implementacij glede na zahteve aplikacije. V primerjavi z

Websocketi ima slabo lastnost, da se povezava med strežnikom in brskalnikom prekine, ko

se dodatki prenesejo, ob naslednji povezavi pa se more znova vzpostaviti. Comet je

zasnovan preko protokola HTTP in s tem ustvarja nepotreben mrežni promet.

2.1.4 Websocket

Websocket specifikacija definira API [6, 18], ki temelji na »socket« povezavi, med

brskalnikom in strežnikom. Povezava je persistentna, kar pomeni, da lahko brskalnik in

strežnik svoje sporočilo pošljeta ter se nanj odzoveta kadarkoli.

Protokol Websocket je primeren za zahtevne realno-časovne aplikacije, kot so recimo

večigralske igre. Protokol je namreč hitrejši v primerjavi z drugimi rešitvami, pri katerih

povezava poteka preko protokola HTTP. Pri Websocketih se povezava začne preko

protokola HTTP, nato pa, če strežnik omogoča tehnologijo Websocket, na tega tudi

preklopi. Protokol je zaradi tega, ker ne temelji na protokolu HTTP, težje implementirati.

Izpostavimo lahko tudi težave s starejšimi različicami brskalnikov, ki tega protokola ne

podpirajo. Zaradi protokola, ki ne temelji na protokolu HTTP, se pojavijo težave s požarnimi

zidovi in posredniškimi strežniki.

Page 15: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

4

3 SPECIFIKACIJE PROJEKTA

3.1 Izbira tehnologije

V tej diplomski nalogi smo hoteli raziskati nove oz. novejše tehnologije, hkrati pa smo želeli

poiskati ustrezno arhitekturo za uporabo tehnologije Websocket. Tekom raziskovanja smo

naleteli na Node.js, strežniško spletno tehnologijo, napisano v JavaScriptu. Na spletu smo

našli veliko primerov klepetalnic, ki so v Node.js [12] zapisane samo v nekaj vrsticah

programske kode. Zaradi tega smo se odločili, da celotno aplikacijo napišemo v

programskem jeziku Node.js. Ena izmed velikih prednosti Node.js je ta, da lahko JavaScript

uporabljamo na odjemalčevi in na strežnikovi strani. Obenem je tehnologija brezplačna in

omogoča dobro razširljivost.

Tekom dela na projektu smo ugotovili, da Node.js ni idealna rešitev za vse probleme.

Node.js ima bistveno prednost za delo z vhodno/izhodnimi enotami enotami, kot je delo z

datotekami in delo s podatkovno bazo. Ker Node.js teče v samo enem procesu, ni

priporočljivo, da proces obremenimo s težko računsko logiko. V našem primeru je bilo

delovanje procesa na strani strežnika prepočasno, zato smo se odločili, da vso računsko

logiko preselimo na odjemalčevo stran.

3.2 Uporabljene tehnologije

V spodnji tabeli (Tabela 1) so vse pomembne tehnologije, ki smo jih uporabili pri izvedbi

projekta. V tabeli so najprej tehnologije na strežnikovi strani, nato pa uporabljene

tehnologije na odjemalčevi strani. V nadaljevanju je vsaka tehnologija na kratko opisana.

Večina tehnologij je pod licenco MIT, kar pomeni, da lahko knjižnici prosto prispevamo in jo

brezplačno uporabljamo.

Page 16: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

5

Tabela 1: Uporabljene tehnologije

Tehnologija/ knjižnica Tip Verzija Licenca

Strežniška stran

Node.js JavaScript ogrodje 4.4.3 MIT

Express Ogrodje nad Node.js 4.13.1 MIT

Express-generator Ogrodje za ustvarjanje

MVC Node.js strukture

2.10.0 MIT

Socket.io Web sockets 1.4.5 MIT

MongoDB Podatkovna baza 3.2 GNU

Mongoose ORM za MongoDB 4.4.13 MIT

Client-sessions Seje na odjemalčevi strani 0.7.0 MIT

Cookie-parser Seje na strežniški strani 1.3.5 MIT

Morgan Pisanje dnevnikov na

strežniški strani

1.6.1 MIT

Jade/Pug Ogrodje za pisanje predlog 2.0.0-alpha6 MIT

Odjemalčeva stran

Material-icons Googlova pisava za ikone CC-BY

PleaseWait.js Knjižnica za simuliranje

nalaganja

MIT

Bootstrap HTML/JavaScript/CSS

ogrodje za odzivno

oblikovanje

3.3.6 MIT

Bootstrap material design Razširjeno ogrodje za

Bootstrap

0.5.9 MIT

prefixfree.js JavaScript ogrodje 1.0.3/1.0.7 MIT

JQuery JavaScript ogrodje v2.2.2 MIT

Tween.js JavaScript tweening

ogrodje

v16.3.4 MIT

Three.js JavaScript 3D ogrodje v76 MIT

Page 17: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

6

3.2.1 Node.js

Node.js je strežniško okolje, napisano v programskem jeziku JavaScript [12, 13], ki temelji

na Chromovem V8 JavaScript ogrodju. Node.js za svoje delovanje uporablja eno nit in

dogodkovno proženje, kar omogoča visoko razširljivost. Je jedro, v katerega se dodajajo

knjižice oz. moduli, ki omogočajo delovanje naše aplikacije. Edina protokola, ki jih Node.js

že podpira, sta HTTP in HTTPS. Prav tako podpira osnovno delo z datotekami, kot je

dostavljanje datotek html. Osnovna uporaba knjižice je zelo enostavna. Razvijalcem

omogoča tudi več kontrole nad aplikacijo – v tem primeru je delovanje aplikacije težje

razumeti.

3.2.1.1 Express in Express Generator

Kot smo že omenili, Node.js ne ponuja veliko privzetih funkcionalnosti. Ima pa eno zelo

dobro lastnost – zraven Node.js se namesti tudi NPM. NPM je upravljalnik paketov za

Node.js in je trenutno eden izmed bolj popularnih upravljalnikov za pakete. Uporabili ga

bomo zato, da si namestimo Express Generator, s katerim lahko ustvarimo osnovno

strukturo programa. Da inicializiramo osnovno strukturo (Slika 1), zaženemo ukaz, kot je

prikazano v Koda 1.

$ express demo

Koda 1: Uporaba generatorja Express

Slika 1: Osnovna struktura generatorja Express

Page 18: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

7

Z generatorjem Express lahko ustvarimo aplikacijo po programskem vzorcu MVC [4].

Vidimo lahko, da so bili ustvarjeni novi imeniki. Imenik 'public' je namenjen vsem javno

dostopnim datotekam, kot so slike, JavaScript datoteke, CSS datoteke itd. V ta imenik ne

smemo dajati strežniških datotek, kot je recimo datoteka 'app.js'. Imenik 'routes' je

namenjen usmerjanju tokov in nudi modularen pristop, saj lahko vsako usmerjanje pošljemo

v novo datoteko oz. nov imenik. Imamo še imenik 'views', ki je namenjen predlogam. Na

koncu imamo imenik 'bin', v katerem je začetna datoteka za zagon projekta.

Generator Express ustvari pomembno datoteko, imenovano 'package.json'. Vsebina je

vidna spodaj (Koda 2).

"name": "demo",

"version": "0.0.0",

"private": true,

"scripts": {

"start": "node ./bin/www"

},

"dependencies": {

"body-parser": "~1.13.2",

"cookie-parser": "~1.3.5",

"debug": "~2.2.0",

"express": "~4.13.1",

"jade": "~1.11.0",

"morgan": "~1.6.1",

"serve-favicon": "~2.3.0"

}

}

Koda 2: JSON vsebina 'package.json' datoteke

Ta datoteka ima zapisane vse odvisnosti, ki jih program potrebuje, da ga lahko sploh

zaženemo. V Tabela 2 so naštete vse knjižnice z opisi svojih namenov.

Tabela 2: Seznam Odvisnosti

Odvisnost Namen

Body-parser pridobivanje podatkov iz zahtev POST,

GET

Cookie-parser ustvarjanje sej s piškotki za uporabnike

Debug razhroščevalnik

Express ogrodje nad Node.js

Morgan Uporabljen za beleženje, npr. izjem ipd.

Serve-favicon prikazovanje faviconov na spletni strani

Page 19: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

8

Če bi hoteli v danem trenutku projekt zagnati, bi nam program sporočil izjemo, saj nima

nameščenih odvisnosti. Da namestimo odvisnosti, zaženemo ukaz, viden spodaj (Koda 3).

$ npm install

Koda 3: Namestitev vseh odvisnosti

Ta ukaz poišče vse odvisnosti, ki smo jih definirali v datoteki 'package.json', in jih namesti

v imenik 'node_modules' v korensko kazalo projekta.

3.2.2 MongoDB

Podatkovne baze se uporabljajo za trajno shranjevanje podatkov. MongoDB je [14]

podatkovna baza NoSQL. Namestimo ga na naslednji spletni strani [10]. V MongoDB ni

tabel kot pri podatkovnih bazah SQL. Podatki so shranjeni v objektih JSON. Uporaba z

Node.js je idealna izbira za nas, saj ni pretvorbe podatkov, ker Node.js prav tako uporablja

objekte JSON. Glavna prednost podatkovnih baz NoSQL je v hitrosti in razširljivosti. Dokler

so poizvedbe enostavne, lahko procesira zelo veliko število poizvedb. V MongoDB ni

potrebe po ustvarjanju podatkovne baze in ustvarjanju tabel in struktur, saj z njimi upravlja

sam.

3.2.2.1 Poganjanje lokalne MongoDB instance

MongoDB poženemo lokalno z ukazom opisanim v Koda 4. Ukaz zažene proces, ki se

izvaja v ozadju.

$ .\mongod.exe –dbpath <pot do projekta>

Koda 4: Poganjanje lokalne MongoDB instance

Najboljše je, da ustvarimo nov imenik 'data' v korenu projekta in tam zaženemo proces, ki

se izvaja v ozadju.

V našem projektu Node.js moramo dodati modul, imenovan 'mongo'. Mongo je prilagodilnik

do podatkovne baze MongoDB in omogoča, da z njo manipuliramo. Za povezavo do

podatkovne baze uporabimo povezovalni niz, prikazan v kodi 5.

mongo.connect('mongodb://localhost/test

Koda 5: Povezovalni niz do podatkovne baze

Page 20: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

9

S tem ukazom se povežemo na lokalno podatkovno bazo z imenom 'test'. Če baza še ni

bila ustvarjena, jo MongoDB ustvari avtomatsko. Ko je to urejeno, lahko nad bazo že

izvajamo poizvedbe.

3.2.2.2 mLab MongoDB

Med raziskovanjem smo naleteli na platformo mLab [9]. mLab, kot se platforma imenuje,

ponuja 500 MB podatkovnega prostora na oddaljenem strežniku brezplačno, kot je

prikazano na Slika 2. Ko ustvarimo novo podatkovno bazo, lahko izbiramo med 3 ponudniki:

AWS, Azure ali Google. Izberemo lahko tudi lokacijo strežnika. S tem dosežemo čim manjše

odzivne čase. Za projekt, ki smo si ga izbrali, je 500 MB podatkovnega prostora več kot

dovolj.

Slika 2: Ponudba mLaba

Potem ko se registriramo, moramo ustvariti uporabnika, ki lahko v instanco podatkovne

baze bere in piše. Za dostop do podatkovne baze zamenjamo povezovalni niz pri Koda 5 z

naslednjo kodo Koda 6).

mongodb://<dbuser>:<dbpassword>@ds032579.mlab.com:32579/sudokudb

Koda 6: Povezovalni niz do mLab-ove podatkovne baze

Baza že deluje na oddaljenem strežniku. Seveda ima brezplačna opcija nekaj

pomanjkljivosti. Pomanjkljivost je odzivni čas podatkovne baze, in če želimo narediti

varnostno kopijo podatkovne baze, moramo to žal storiti ročno.

3.2.3 Mongoose

Mongoose je jezik za podporo objektno relacijskim preslikavam za MongoDB [15].

MongoDB privzeto ne omogoča ustvarjanja kakršnihkoli modelov ali struktur. Brez strukture

Page 21: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

10

lahko po nepotrebnem hitro naredimo kakšno napako, kot je vstavljanje nepotrebnih

podatkov v podatkovno bazo. Mongoose omogoča ustvarjanje modelov, kot na primer

model za uporabnika (Koda 7).

module.exports.User = mongoose.model('User', new Schema({

id: ObjectId,

username: {type: String, unique: true},

password: String,

color: String,

image: String,

gamesPlayed: {type: Number},

isGuest: {type: Boolean, default: false},

dateCreated: { type: Date, default: Date.now }

}));

Koda 7: Model uporabnika

Primer, kako napolnimo objekt uporabnika, je viden spodaj (Koda 8). Programska koda je

lažje berljiva; S tem naredimo manj napak.

var user = new models.User({

username: req.body.input_username,

password: hash,

color: req.body.profile_color_hex,

image: req.body.img_profile_picture_src,

gamesPlayed: 0,

isGuest: false

});

Koda 8: Ustvarjanje novega uporabnika

3.2.4 Ogrodje za predloge

Obstaja kar nekaj ogrodij za predloge v Node.js. Tukaj je nekaj izmed najbolj uporabljenih:

Jade/Pug.

Express-handlebars.

Express-react-views.

Mustache.js.

Privzeto ogrodje za predloge, ki je vključeno v generator Express, je Jade. Sprva

omenjenega ogrodja nismo marali, vendar smo, ko smo s tem ogrodjem projekt končali,

dojeli, da je Jade zelo uporaben. Primerjava z navadnim jezikom HTML je vidna na Slika 3.

Page 22: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

11

Slika 3 Jade v primerjavi s HTML

Na začetku projekta smo potrebovali nekaj časa, da smo se ogrodje naučili uporabljati. Z

ogrodjem pridobimo nekaj časa, saj težje naredimo napako. Uveljavi se šele, ko ga

uporabljamo z ogrodjem Bootstrap. Edini problem, ki se pojavi pri tem ogrodju za predloge,

je ta, da se celotna spletna stran generira iz JavaScripta. Generiranje otežuje iskalnikom

iskanje relevantnih podatkov na spletni strani. Ogrodje za predloge z imenom Exspress-

react-views odpravi ta problem. Odločili smo se, da nas problem z iskalniki ne moti. V ta

namen smo se odločili za Jade. Jade so žal opustili. Ogrodje se je preimenovalo v Pug. Ko

govorimo o ogrodju Jade ali ogrodju Pug, mislimo isto stvar [7].

3.2.5 Socket.io

Web Socketi omogočajo obojestransko izmenjavanje informacij med odjemalčevo in

strežniško stranjo. Za Node.js se knjižnica imenuje socket.io. Socket.io [17] je knjižica, v

kateri je implementiran spletni protokol Websocket. Če brskalnik ne podpira Websocketa,

knjižica avtomatsko deluje s starejšim pristopom, v tem primeru je to Flash Socket.

Integracija z Node.js je enostavna. Socket. io namestimo tako, da zaženemo naslednji ukaz

(Koda 9).

$ npm install socket.io

Koda 9: Namestitev Socket.io

Na odjemalčevi strani socket.io vključimo z naslednjo vrstico kode Koda 10).

Page 23: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

12

script(type='text/javascript', src='/socket.io/socket.io.js')

Koda 10: Vključitev socket.io na odjemalčevi strani

Enostavnost uporabe socket.io je vidna spodaj (koda 12). Ko se na odjemalčevi strani

socket.io vzpostavi, se kliče metoda 'connect'. Ta metoda je privzeta in je ne moremo

poimenovati drugače. Metoda pošlje unikatno številko na strežniško stran.

// on connection to server send my roomId

socket.on('connect', function(){

socket.emit('load', id);

});

Koda 11: Izsek kode socket.io na odjemalčevi strani

Poglejmo ustrezen izsek kode (Koda 12), ki se izvede, ko odjemalec pošlje unikatno številko

na strežniško stran. Glede na število uporabnikov v t.i. sobi, ki je določena z unikatno

številko, strežnik naredi tri odločitve. V primeru, da v sobi še ni uporabnika, strežnik

uporabnika obvesti, naj počaka soigralca. V drugem primeru, ko je en igralec že v sobi, mu

strežnik pošlje obvestilo, da se je pridružil drugi igralec. Drugemu igralcu se pošljejo podatki

o igralcu, ki je že v sobi. Tako se lahko uporabnik, ki se je ravnokar pridružil, odloči, ali sploh

želi igrati s tem igralcem. Zadnji primer se sproži, kadar sta v sobi več kot 2 igralca. V tem

primeru uporabnika, ki se je hotel pridružiti, obvesti o polni sobi. Uporabnik se v tem primeru

ne more pridružiti igri.

socket.on('load',function(data){

var room = getClientsInRoom(data);

//If no one but you is in the room you are the server

if(room.length === 0 ) {

socket.emit('peopleInRoom', {number: 0});

}

//One person

else if(room.length === 1) {

sudokuio.in(data).emit('notifyServerPlayerJoined', {

boolean: true

});

socket.emit('peopleInRoom', {

number: 1,

username: room[0].username,

image : room[0].image,

color : room[0].color,

id: data

});

}

//More than one

else if(room.length >= 2) {

sudokuio.broadcast.to(data).emit('tooMany', {boolean: true});

Page 24: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

13

}

});

Koda 12: Metoda 'load' na strežniški strani

3.2.6 PleaseWait.js

Veliko je datotek, ki jih je treba naložiti na odjemalčevo stran. Knjižnica PleaseWait.js [8]

omogoča uporabljanje animacije, medtem ko se DOM nalaga. V izseku kode (Koda 13)

vidimo primer uporabe knjižnice PleaseWait.js. Da lahko knjižnico uporabimo, moramo skriti

element »body« in čimprej klicati metodo pleaseWait, ki je del knjižnice.

function StartAnimation(){

loading_screen = pleaseWait({

logo: "",

backgroundColor: '#eaeae9',

loadingHtml: "<div class='loader_cubewrap loader'><div

class='loader_cube'><div class='cube_front'><p>S</p></div><div

class='cube_back'><p>D</p></div><div class='cube_left'><p>O</p></div><div

class='cube_right'><p>U</p></div></div></div>"

});

cubeAnimationCounter = 0;

animationStop = false;

var elements = [$('.cube_front > p'),$('.cube_right >

p'),$('.cube_back > p'),$('.cube_left > p')];

elements[0].text('S');

elements[1].text('U');

elements[2].text('D');

elements[3].text('O');

animateCube();

}

StartAnimation();

Koda 13: PleaseWait.js animacija

Ko se DOM naloži, animacijo prekinemo z naslednjim ukazom (Koda 14). Na referenco

pleaseWait, v tem primeru loading_screen, kličemo metodo 'finish'.

loading_screen.finish();

Koda 14: Prekinitev animacije

Animacija, ki smo jo uporabili za našo aplikacijo, je vidna na sliki 4. Animacija v končnemu

uporabniku vzbudi občutek, da se z aplikacijo nekaj dogaja. Naša filozofija je uporabniku

raje animirati animacijo, dolgo tri sekunde, kot pa da strmi v prazen zaslon eno sekundo.

Page 25: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

14

PleaseWait.js je enostavna, ampak uporabna knjižnica. Uporabniku poda bolj tekočo

spletno uporabniško izkušnjo.

Slika 4: Animacija nalaganja

3.2.7 Bootstrap

Bootstrap je HTML, CSS in JS ogrodje za razvoj odzivnih spletnih aplikacij na odjemalčevi

strani [2]. Za programerje je Bootstrap zelo uporabno ogrodje, če niso v ekipi z

oblikovalcem, kot je bilo v našem primeru. Spletna stran je privlačnejša na prvi pogled in

pritegne več uporabnikov. Poglejmo primerjavo med obrazcem, narejenim s pomočjo

Bootstrapa na Slika 5 in privzetoim obrazcem HTMLna sliki 6. Izgled strani tako z malo

vloženega truda približamo smernicam razvoja uporabniških vmesnikov.

Slika 5: Enostaven obrazec, narejen z Bootstrapom

Slika 6: Enostaven obrazec, narejen samo z uporabo HTML

Page 26: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

15

Ponuja še eno uporabno funkcijo, imenovano modalna okna. Primer zaprtega modalnega

okna je viden na Slika 7, Primer odprtega modalnega okna pa na Slika 8. Modalna okna

naredijo spletno stran veliko bolj organizirano. Končni uporabnik lažje navigira po spletni

strani. Le-ta ima tako več funkcionalnosti, saj modalna okna preprosto pokažemo ali

skrijemo. Spletna stran izgleda dobro oblikovana.

Slika 7: Bootstrap zaprto modalno okno

Slika 8: Bootstrap odprto modalno okno

3.2.8 Bootstrap »material design«

Google je zbral skupino strokovnjakov na področju spletnega oblikovanja. Ti oblikovalci so

imeli en cilj. Ta je bil ustvariti oblikovno podobo spletnih in mobilnih aplikacij, ki bi bila bolj

intuitivna za ljudi. Inspiracijo so našli v papirju formata A4. Specifikacija se imenuje

»Material Design«.

Page 27: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

16

Eno izmed ogrodij, ki temelji na »Material Designu«, je ogrodje z imenom bootstrap-

material-design [3]. Kot že ime pove, ogrodje temelji na Bootstrapu in je zato idealno za

uporabo v našem projektu, saj smo Bootstrap že vključili. Ena izmed funkcionalnosti je

sprememba vnosnih polj. Vnosno polje se spremeni z animacijo (Slika 9, Slika 10), ki

premakne 'Username' na vrh vnosnega polja, ko podatke vpišemo.

Slika 9: Bootstrap-material-design prazno vnosno polje

Slika 10: Bootstrap-material-design neprazno vnosno polje

Naslednji primer na slikah Slika 11 in Slika 12 prikazuje, kako se gumb spremeni, ko nanj

kliknemo. Gumb se optično dvigne s tem, ko se okoli gumba doda senca.

Slika 11: bootstrap-material-design gumb

Slika 12: bootstrap-material-design stisnjen gumb

3.2.9 Three.js

Three.js je 3D-knjižnica [11]. Cilj te knjižnice je poenostavljanje dela z WebGL. V našem

primeru smo videli, da je res tako. Ustvarjanje knjižnice WebGL je časovno potratno, zato

smo se odločili, da uporabimo Three.js. Poglejmo programsko kodo spodaj (Koda 15). Z

nekaj vrsticami lahko ustvarimo 3D-svet, v katerem je kocka. V čisti aplikaciji WebGL bi

potrebovali za isti rezultat več programske kode.

function init() {

scene = new THREE.Scene();

Page 28: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

17

camera = new THREE.PerspectiveCamera( 75, window.innerWidth /

window.innerHeight, 1, 10000 );

camera.position.z = 1000;

geometry = new THREE.BoxGeometry( 200, 200, 200 );

material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe:

true } );

mesh = new THREE.Mesh( geometry, material );

scene.add( mesh );

renderer = new THREE.WebGLRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );

document.body.appendChild( renderer.domElement );

}

Koda 15: Three.js kocka v prostoru

V kombinaciji s Three.js smo uporabili tudi Tween.js, ki je knjižnica za animirane akcije. V

naši aplikaciji jo uporabljamo za animiranje kamere in začetno animacijo, ko se kocke

obrnejo za 90° .

Na kratko opišimo proces Three.js, ki smo ga uporabili. Najprej v polju z dimenzijami 9 x 9

ustvarimo prav toliko kock in jih postavimo na sceno. Naložimo pisavo iz datoteke. V ozadju

generiramo veljaven Sudoku, zatem pa vnesemo številke iz generiranega Sudokuja na 3D-

sceno. Three.js nam ponuja, da lahko Sudoku poljubno rotiramo in približujemo, kot vidimo

na Slika 13.

Slika 13: Rotacija Sudokuja

Page 29: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

18

3.3 Izbira spletnega strežnika

Node.js potrebuje za svoje delovanje malo procesorske moči, zato imamo veliko izbiro, kje

bi lahko naš spletni strežnik postavili. Potencialno bi lahko deloval tudi na kakšni napravi

IoT. Node.js uporablja za svoje delovanje samo eno nit, zato so časovno potratne operacije

potratne za delovanje spletnega strežnika. Glede na to, da Node.js za svoje delovanje ne

potrebuje veliko računalniških virov, smo hoteli najti najcenejšo verzijo spletnega strežnika.

3.3.1 Heroku

Heroku je spletni ponudnik [5] strežniških storitev. Namenjen je manjšim start-up podjetjem

in samostojnim razvijalcem, ki nimajo primerne strežniške infrastrukture. Ko hočemo

spletno aplikacijo postaviti na spletni strežnik, moramo upoštevati več stvari. Najprej

moramo izbrati ponudnika IaaS, potem je treba izbrati še OS. Naslednja zadeva je

konfiguriranje OS, da aplikacijo sploh lahko zaženemo. Heroku ta proces s svojo storitvijo

bistveno poenostavi (Slika 14).

Slika 14: Ideja spletnega ponudnika strežniških storitev Heroku

Heroku uporablja git za prenos programske kode na spletni strežnik. Prva zadeva, ki jo

moramo narediti, je inicializirati git, da ustvarimo prazen lokalni repozitorij z ukazom, vidnim

spodaj (Koda 16).

$ git init

Koda 16: Inicializacija git

Page 30: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

19

Z naslednjim ukazom (Koda 17) indeksiramo vse spremembe. Nato inicializiramo Heroku

projekt z ukazom, prikazenem v Koda 18. Heroku projektu dodeli naključno ime. Naključno

ime je v tem primeru 'cryptic-ravine-23433', kot vidimo na Slika 15.

$ git add .

Koda 17: Dodajanje kode v lokalni repozitorij

$ heroku create

Koda 18: Inicializacija Heroku projekta

Slika 15: Rezultat inicializacije Heroku projekta

Ko smo Heroku projekt uspešno inicializirali, indeksirane spremembe shranimo v lokalni

repozitorij. Nato ga prenesemo na Heroku strežnik z ukazoma, vidnima spodaj (Koda 19).

Če se je prenos zaključil uspešno, dobimo obvestilo, vidno na Slika 16.

$ git commit –m »initial commit«

$ git push heroku master

Koda 19: Shranjevanje v lokalni repozitorij in prenos na strežnik Heroku

Slika 16: Uspešen prenos na strežnik

Page 31: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

20

Po zaključenem prenosu na spletni strežnik odpremo aplikacijo v privzetem spletnem

brskalniku z naslednjim ukazom (Koda 20). Rezultat je viden na Slika 17.

$ heroku open

Koda 20: Odprtje Heroku aplikacije

Slika 17: Heroku demo projekt

Tako smo samo z nekaj ukazi postavili našo spletno stran na oddaljeni spletni strežnik.

Velika prednost je brezplačna verzija, ki jo ponuja Heroku. Seveda ima brezplačna verzija

svoje slabosti, vendar je ta opcija še zmeraj zelo uporabna za demo projekte.

3.4 Izdelava aplikacije

Aplikacijo smo razvijali v več fazah razvoja. Najprej smo smiselno načrtali in postavili

podatkovno bazo. Sledila je postavitev strežniške strani z Node.js. Nato smo sočasno

razvijali odjemalčevo in strežniško stran, saj so se funkcionalnosti dopolnjevale. V tem

poglavju bomo opisali nekaj glavnih problemov, na katere smo pri izdelavi aplikacije naleteli.

Opisali bomo tudi rešitve, ki se nanašajo na te probleme.

Page 32: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

21

3.4.1 Generiranje Sudoku igre

Prvi problem, ki se nam je pojavil pri načrtovanju

aplikacije, je bil potreba po generiranju unikatne

Sudoku igre. Enostavno »metanje« števil od 1 do 9

očitno ne gre, saj hitro ustvarimo neveljaven Sudoku.

Če torej ne znamo generirati Sudoku igre iz nič,

ustvarimo Sudoku igro iz že generiranega Sudokuja.

Uporabili smo Sudoku iz Wikipedije (Slika 18) [19]. Če

odstranimo vsa rdeča števila na sliki, dobimo veljaven

Sudoku, ampak tak Sudoku ni unikaten, zato ga ne

moremo uporabiti. Če bi odstranili 30 polj, bi dobili

veljaven Sudoku, ampak bi vsaka igra imela isto

rešitev. Igralec bi se lahko rešitev naučil na pamet in

bi lahko tako rešil vse igre.

Rešitev, ki smo jo uporabili, je enostavna. Našli smo pet metod, ki jih lahko uporabimo nad

veljavnim Sudokujem in ohranimo njegovo veljavnost. Programska koda prve metode Koda

21) najprej generira dve števili in v jih v primeru, da nista enaki, zamenja (na primer vsa

polja z vrednostjo 2 s 4 in obratno).

//Method1 replaces the number like 2 with 4

this.randomizeMethod1 = function() {

var number1 = getRandomNumber(9);

var number2 = getRandomNumber(9);

if (number1 == number2) return;

for (var i = 0; i < 9; i++) {

for (var j = 0; j < 9; j++) {

if (this.game[i][j].value == number1)

this.game[i][j].value = number2;

else if (this.game[i][j].value == number2)

this.game[i][j].value = number1;

}

}

}

Koda 21: Metoda 1 za generiranje Sudokuja

Programska koda druge metode (Koda 22) zamenja pravokotnik dimenzij 3 x 9 z drugim

pravokotnikom. Metoda najprej generira dva indeksa med 0 in 2. Če indeksa nista enaka,

zamenja pravokotnika. Igra ostane veljavna po zamenjavi. Metoda 3 prav tako zamenja

pravokotnik, vendar tistega z dimenzijami 9 x 3, ki leži vodoravno. Metoda 3 je zelo podobna

metodi 2 in je zato ne bomo posebej omenjali.

Slika 18: Generiran Sudoku iz

Wikipedije

Page 33: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

22

//Method2 replaces 3x9 with another 3x9 horizontal

this.randomizeMethod2 = function () {

var index1 = getRandomIndex(3);

var index2 = getRandomIndex(3);

if (index1 == index2) return;

for (var i = 0; i < 3; i++) {

for (var j = 0; j < 9; j++) {

var tmp = this.game[(index1 * 3) + i][j].value;

this.game[(index1 * 3) + i][j].value = this.game[(index2 * 3)

+ i][j].value;

this.game[(index2 * 3) + i][j].value = tmp;

}

}

}

Koda 22: Metoda 2 za generiranje Sudokuja

Programska koda četrte metode (Koda 23) zamenja dva stolpca z dimenzijami 1 x 9 znotraj

stolpca z dimenzijami 3 x 9. Metoda najprej generira indeks stolpca z dimenzijami 3 x 9,

nato pa 2 indeksa od 0 do 2. V primeru, da sta indeksa različna, stolpca zamenja. Metoda

5 je podobna metodi 4, le da se pri tej zamenja dve vrstici z dimenzijami 9 x 1 znotraj

pravokotnika z dimenzijami 9 x 3.

//Method4 a line inside the 3x9 horizontal

this.randomizeMethod4 = function () {

//Choose a 3x9

var index = getRandomIndex(3);

var index1 = getRandomIndex(3);

var index2 = getRandomIndex(3);

if (index1 == index2) return;

for (var j = 0; j < 9; j++) {

var tmp = this.game[(index * 3) + index1][j].value;

this.game[(index * 3) + index1][j].value = this.game[(index * 3)

+ index2][j].value;

this.game[(index * 3) + index2][j].value = tmp;

}

}

Koda 23: Metoda 4 za generiranje Sudokuja

Za generiranje igre Sudoku uporabimo kombinacijo teh 5 metod Koda 24). Imamo zanko,

ki se ponovi od 4- do 13-krat. V vsaki iteraciji se generira naključno število od 1 do 5. Nato

se kliče ustrezna metoda za generiranje.

this.Randomize = function () {

if (this.validType() == false) return;

//repeat random times, max 13, min 4

Page 34: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

23

for (var i = 0; i < getRandomNumber(10) + 3; i++)

switch (getRandomNumber(5)) {

case 1:

this.randomizeMethod1();

break;

case 2:

this.randomizeMethod2();

break;

case 3:

this.randomizeMethod3();

break;

case 4:

this.randomizeMethod4();

break;

case 5:

this.randomizeMethod5();

break;

default:

break;

}

}

Koda 24: Generiranje Sudokuja

Po generiranju odstranimo določeno število polj iz igre Sudoku. Število polj se razlikuje

glede na izbrano težavnost igre. Tako vsakič dobimo unikaten Sudoku za naše igralce.

Rešitev je tudi procesorsko nezahtevna.

3.4.2 Reševanje igre Sudoku

Obstaja kar nekaj metod za reševanje igre Sudoku – vse od zelo preprostih do

najzahtevnejših. Mi smo se lotili dveh enostavnejših, saj cilj te diplomske naloge ni bil

implementirati kompleksni reševalni algoritem.

V algoritmu za reševanje najprej iščemo prazna polja. Če smo v vsaj eni iteraciji skozi

prazna polja našli rešitev, algoritem ponavljamo. Del algoritma za reševanje vidimo na

programski kodi spodaj (Koda 25).

this.solveSudoku = function(){

if (typeof (this.game[8][8]) === 'undefined') return;

var foundSolution = true;

while(foundSolution == true){

foundSolution = false;

for(var i=0; i < 9; i++){

for(var j=0; j < 9; j++){

if(this.game[i][j].value == 0)

foundSolution = this.tryToSolveField(i, j);

}

}

Page 35: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

24

}

return this.game;

}

Koda 25: Iskanje praznega polja

Za vsako prazno polje se izvede del kode, viden spodaj Koda 26), ki najprej predpostavi,

da ima prazno polje devet možnih rešitev. Cilj algoritma je eliminacija rešitev za polje. Kadar

ostane samo ena rešitev, je ta prava. Algoritem naprej eliminira polja v kvadratu z

dimenzijami 3 x 3, v katerem se prazno polje nahaja.

this.tryToSolveField = function(x, y) {

var possibleFieldEntries = [1, 2, 3, 4, 5, 6, 7, 8, 9];

//Check all the numbers in 3x3

var boundingRect = returnFieldPosQuad(x, y);

for(var i = boundingRect.rowMin; i <= boundingRect.rowMax; i++){

for(var j = boundingRect.colMin; j <= boundingRect.colMax; j++){

if(i != x || j != y){ // If not the field which was passed

if(this.game[i][j].value != 0){

possibleFieldEntries =

removeFromArray(possibleFieldEntries, this.game[i][j].value);

}

}

}

}

Koda 26: Reševanje kvadrata z dimenzijami 3 x 3

Algoritem eliminira polja v stolpcu z dimenzijami 1 x 9 (Koda 27). Prav tako v nadaljevanju

eliminira polja v vrstici z dimenzijami 1 x 9. Koda je podobna.

//Check all the numbers in 1x9

var j = y;

for (var i = 0; i < 9; i++) {

if(i != x || j != y){ // If not the field which was passed as

argument

if(this.game[i][j].value != 0){

possibleFieldEntries = removeFromArray(possibleFieldEntries,

this.game[i][j].value);

}

}

}

Koda 27: Reševanje stolpca z dimenzijami 1 x 9

V primeru, da nam v polju možnih rešitev ostane samo eno polje, je to le-to rešitev za dano

prazno polje (Koda 28).

//Check if method solved the case

if(possibleFieldEntries.length == 1){

this.game[x][y].value = possibleFieldEntries[0];

return true;

Page 36: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

25

}

Koda 28: Preveritev, ali obstaja rešitev za prazno polje

3.4.3 Večigralski Sudoku

Za implementacijo smo uporabili knjižnico socket.io. Knjižica Socket.io nam omogoča

dvosmerno povezavo med strežniško in odjemalčevo stranjo.

Na kratko povzemimo, kako večigralski Sudoku deluje. Ko igralec ustvari večigralsko igro,

se generira naključna številka t.i. privatne sobe. Igralec, ki ustvari igro, ima vlogo strežnika,

kar pomeni, da bo igro generiral in poslal drugemu uporabniku, ko se mu ta pridruži. Prvi

igralec pošlje soigralcu URL. Ko se soigralec poveže na igro, se le-ta začne in traja, dokler

niso izpolnjena vsa polja. Na koncu se izračuna število točk in določi zmagovalec.

3.4.3.1 Odjemalčeva stran večigralskega Sudokuja

Dandanes je število naprav, ki se lahko povežejo na splet, zelo visoko. Hoteli smo

implementirati rešitev, ki bi delovala na večini naprav. WebGL žal ni podprt na vseh

napravah, ali pa je podprt samo delno. Odločili smo se, da izdelamo dva različna pristopa

za igranje. Prvi pristop je bil narejen s standardnimi tehnologijami, vidnimi na Slika 20, drugi

pa z WebGL (Slika 19). S tem je zagotovljeno delovanje na skoraj vseh napravah.

Slika 19: Pristop WebGL

Page 37: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

26

Slika 20: Pristop CSS3

Pristopa smo tudi združili. Tako lahko z pristopom WebGL igramo proti pristopu CSS3.

Implementacija je relativno preprosta. Pri implementaciji moramo upoštevati, da se

implementirajo iste socket.io metode. Opišimo tok igre bolj podrobno.

Kot smo že omenili, je vsaka večigralska igra t.i. privatna soba. Soba ima naključno celo

število. Ko igralec ustvari igro, se mu pokaže zaslon, viden na Slika 21, kjer je URL do

trenutne igre. Vidimo lahko, da ima soba identifikator 857550.

Slika 21: Sudoku: povabi prijatelja

Page 38: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

27

Ko se drugi igralec pridruži igri, se mu pokaže zaslon, viden na sliki 22. Na sliki vidimo

igralca, ki je že v sobi. Tisti, ki se je pridružil, se lahko odloči, ali bo z igralcem igral ali ne.

Slika 22: Sudoku: potrditev začetka igre

Po potrditvi drugega igralca se igra prične. Cilj igre je rešiti čim več praznih polj na sliki

(Slika 19 in Slika 20). Igralca zbirata točke, ki so med igranjem skrite. Začetna prazna polja

so vredna več kot tista na koncu igre. Igra se konča, ko so zapolnjena vsa polja. Ob

zaključku igre se pokaže zaslon, viden na Slika 23. Na zaslonu se prikaže zmagovalec in

število točk, ki sta jih igralca dosegla. Še zmeraj je omogočen klepet.

Slika 23: Sudoku: zaključek igre

Page 39: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

28

3.4.3.2 Večigralski Sudoku: strežniška stran

V nadaljevanju bomo opisali potek komunikacije brskalnika s spletnim strežnikom.

Websocket dogodki se asinhrono prožijo na spletnem strežniku (Slika 24), kar omogoča

visoko število vzporednih povezav na spletni strežnik. Strežnik tako spremlja vse sobe in

število igralcev v vsaki izmed njih. Odgovoren je tudi za posredovanje informacij med

igralcema. Odločili smo se za implementacijo brez podatkovne baze, zato se v primeru, da

pride do prekinitve, podatki izgubijo. Igra traja okoli petnajst minut, zato se nam ni zdelo

smiselno vlagati čas v implementacijo.

Slika 24: Enonitno asinhrono delovanje Node.js

Strežnik najprej čaka na dogodek povezave 'connect', kjer igralec pošlje svojo unikatno

številko t.i. sobe. Strežnik preveri prisotnost igralcev v trenutni sobi. Kadar sta v sobi 2 ali

več igralcev, strežnik odgovori, da je soba že polna. Če je v sobi en igralec, se mu dodeli

vloga strežnika (strežnika v tem smislu, da bo igralec generiral Sudoku in ga poslal drugemu

uporabniku). Strežnik registrira uporabnika v sobo z njegovimi podatki. V tretjem primeru,

ko se drugi igralec pridruži sobi, strežnik pošlje podatke o prvem igralcu. Ko drugi igralec

igro potrdi, ga strežnik registrira v sobo. Soba je tako polna; strežnik zavrne vse nove

zahteve za priključitev igralcev v sobo. Po prijavi dveh igralcev v sobo strežnik začne igro

tako, da sproži dogodek 'start'. Strežnik pošlje vsakemu igralcu podatke o soigralcu.

Vzpostavi se tudi klepet. Med igro obstajajo trije dogodki, na katere strežnik čaka. To so:

Page 40: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

29

zakleni polje, odkleni polje in pošlji vrednost. Kadar uporabnik pošlje dogodek 'lockField' oz.

zakleni polje, se izvede naslednji odsek kode Koda 29), kjer se indeks stolpca in vrstice

pošlje na strežnik.

//Emit lock to server

socket.emit('lockField', {col: Sudoku.X, row: Sudoku.Y});

Koda 29: Zakleni polje

Strežnik čaka na dogodek 'lockField' in ga enostavno posreduje drugemu igralcu s podatki

o igralcu, ki je sprožil to metodo, in indeksom vrstice in stolpca. Programska koda je vidna

spodaj (Koda 30).

socket.on('lockField', function(data){

sudokuio.in(socket.room).emit('receiveLockField', {

boolean: true,

col: data.col,

row: data.row,

playerName: socket.username,

playerColor: socket.color

});

});

Koda 30: Zakleni polje na strežniški strani

Strežnik proži dogodek 'receiveLockField', ki ga prestreže odjemalčeva stran (Koda 31).

Odjemalčeva stran najprej zaklene polje v knjižnici Sudoku, nato pa še na izbranem

pristopu, ki smo ga uporabili. V tem primeru Three.js obarva polje.

socket.on('receiveLockField', function(data){

if(data.boolean){

Sudoku.lockField(data.row, data.col);

threejsLockField(data.row, data.col, data.playerColor);

}

});

Koda 31: Zakleni pridobljeno polje

'Odkleni polje' in 'pošlji vrednost' sta dva dogodka, ki se na strežniku odvijata podobno. V

obeh primerih strežnik samo posreduje poslane informacije drugemu uporabniku.

Strežnik čaka na dogodek 'end'. Proži ga katerikoli igralec, ki zazna, da je število praznih

polj enako nič. V dogodku 'end' strežnik proži dogodek 'onEnd' obema igralcema in zahteva,

da pošljeta svoje število točk na spletni strežnik, ki jih strežnik nato samo posreduje.

Page 41: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

30

Glede na dobljene točke se določi zmagovalec, kot vidimo na Slika 23. Igralca lahko še

zmeraj komunicirata preko klepeta. Klepet je enostavno implementiran. Uporabnik pošlje

sporočilo s programsko kodo (Koda 32) in tako proži dogodek 'msg'. Strežnik čaka na

dogodek 'msg' in posreduje podatke vsem uporabnikom v sobi. To je hitra rešitev, kadar

strežnik ni odziven in pošiljatelj takoj zazna, da njegovo sporočilo ni prispelo.

$('#chatSend').on('submit', function(e){

e.preventDefault();

var textarea = $('#textArea_message');

if(textarea.val().trim().length) {

// Send the message to the other person in the chat

socket.emit('msg', {msg: textarea.val(), playerName:

playerMeUsername, playerImage: playerMeImagePath});

}

textarea.val("");

});

Koda 32: Pošlji sporočilo

Page 42: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

31

4 ZAKLJUČEK

V diplomskem delu smo z uspešno realizacijo večigralske igre pokazali možnost realno-

časovne komunikacije v spletnih aplikacijah. Implementiranje Websocketa z Node.js je

primerna kombinacija, saj smo ugotovili, da povezava med strežnikom in brskalnikom v

našem primeru poteka zanesljivo. Knjižnica, ki smo jo uporabili za implementiranje

tehnologije Websocket, je enostavna za implementacijo, saj je v našem primeru strežniška

in odjemalčeva programska koda napisana v istem programskem jeziku, kar naredi

programsko kodo lažje berljivo. Iz naših ugotovitev se je izkazalo, da uporabljena

tehnologija realno-časovne komunikacije deluje na vseh testiranih modernih spletnih

brskalnikih hitro in zanesljivo.

Uspešno smo realizirali implementacijo z WebGL. Naleteli smo na težavo, ko smo WebGL

hoteli implementirati na mobilnih spletnih brskalnikih. Odločili smo se za dva alternativna

pristopa, ker mobilni telefoni v celoti ali sploh niso podpirali funkcionalnosti WebGL. Z

uporabo Bootstrapa smo zagotovili, da je aplikacija odzivna tudi na mobilnih napravah.

Spekter uporabe aplikacije smo razširili na večino naprav, vendar smo s tem povečali

stroške razvoja.

Zastavljene specifikacije projekta smo z aplikacijo uspešno realizirali, zato smo zadovoljni

s končnim produktom. Dobra ideja, kar se tiče nadaljnjega razvoja produkta, je

implementacija skrbniške strani, s pomočjo katere bi lahko skrbnik spremljal vse igrane igre.

Prav tako bi lahko za vsakega uporabnika beležili zgodovino igranih iger. Aplikacijo bi lahko

bolj tesno povezali s socialnimi omrežji.

Page 43: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

32

5 VIRI

[1] Delovanje AJAX Push. 2016. Dostopno na:

http://www.icesoft.org/java/projects/ICEfaces/ajax-push.jsf [27. 8. 2016]

[2] Knjižica Bootstrap. 2016. Dostopno na: https://getbootstrap.com/ [1. 5. 2016]

[3] Knjižica Bootstrap “Material Design”. 2016. Dostopno na:

https://github.com/FezVrasta/bootstrap-material-design [1. 5. 2016]

[4] Arhitektura MVC. 2016. Dostopno na:

https://developer.chrome.com/apps/app_frameworks [27. 8. 2016]

[5] Gostovanje Heroku. 2016. Dostopno na: https://www.heroku.com/pricing [15. 5. 2016]

[6] HTML5 Websockets. 2016. Dostopno na:

https://www.websocket.org/aboutwebsocket.html [27. 8. 2016]

[7] Ogrodje za predloge Jade. 2016. Dostopno na: http://jade-lang.com/ [1. 5. 2016]

[8] Knjižica PleaseWait. 2016. Dostopno na: https://pathgather.github.io/please-wait/ [24. 5.

2016]

[9] Gostovanje podatkovne baze; mLab. 2016. Dostopno na: https://mlab.com/ [14. 5. 2016]

[10] MongoDB. 2016. Dostopno na: https://www.mongodb.com/download-center [28. 4.

2016]

[11] Three.js – WebGL knjižica. 2016. Dostopno na: https://github.com/mrdoob/three.js/ [5.

5. 2016]

[12] Node.js strežniška arhitektura. 2016. Dostopno na: http://maxprog.net.pl/node-js/node-

js-server-architecture/ [28. 8. 2016]

[13] NodeJS. 2016. Dostopno na: https://nodejs.org/en/download/ [29. 4. 2016]

[14] NoSQL teorija. 2016. Dostopno na: https://www.mongodb.com/nosql-explained [27. 8.

2016]

[15] NPM mongoose. 2016. Dostopno na: https://www.npmjs.com/package/mongoose [28.

4. 2016]

Page 44: UPORABA SPLETNIH TEHNOLOGIJ ZA IZDELAVO REALNO … · i Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije Ključne besede: spletna aplikacija, spletne tehnologije,

Uporaba spletnih tehnologij za izdelavo realno-časovne spletne aplikacije

33

[16] Reverse AJAX. 2016. Dostopno na:

http://directwebremoting.org/dwr/documentation/reverse-ajax/index.html [27. 8.

2016]

[17] Knjižica socket.io. 2016. Dostopno na: http://socket.io/ [9. 5. 2016]

[18] Websockets. Ubl, M., & Kitamura, E. 2016. Dostopno na:

http://www.html5rocks.com/en/tutorials/websockets/basics/ [27. 8. 2016]

[19] Sudoku igra. 2016. Dostopno na:

https://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Sudoku-by-L2G-

20050714_solution.svg/250px-Sudoku-by-L2G-20050714_solution.svg.png [1. 5.

2016]