Vorgurakendused 2 prax 1 2016: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
PriitJ (arutelu | kaastöö)
PriitJ (arutelu | kaastöö)
41. rida: 41. rida:
== HTTP server/klient ==
== HTTP server/klient ==


HTTP baasil töötav protokoll näeb välja umbes järgmine (kasutame ainult GET päringuid):
HTTP baasil töötav protokoll näeb välja umbes järgmine:


   http://1.2.3.4/request?param1=val1&param2=val2
   GET http://1.2.3.4/request?param1=val1&param2=val2
   http://1.2.3.5/response?param1=val1&param3=val3
   POST http://1.2.3.5/response?param1=val1&param3=val3


jne. Seega tuleb meil teha:
jne. Seega tuleb meil teha:


# HTTP server, mis suudaks vastu võtta GET päringut ning parseerida pathi ja parameetrid (query stringi). Meid huvitab ka IP, kust päring tuli, see tuleb edaspidi kasutamiseks meelde jätta.
# HTTP server, mis suudaks vastu võtta GET ja POST päringut ning parseerida pathi ja parameetrid (query stringi). Meid huvitab ka IP, kust päring tuli, see tuleb edaspidi kasutamiseks meelde jätta. POST päringu puhul peab lugema päringu "keha" (body).
# Selle peale peaks serveris käivituma mingi funktsioon. Selle võime jätta hetkel tühjaks
# Selle peale peaks serveris käivituma mingi funktsioon. Selle võime jätta hetkel tühjaks
# Lõpuks saadame vastuse samuti GET päringuga. Seega vaja selleks HTTP klienti.
# Lõpuks saadame vastuse samuti HTTP päringuga. Seega vaja selleks HTTP klienti.


Server tuleb realiseerida ise, kasutades võrgust leitavaid näiteid mikro-http-serveri jaoks (tüüpiliselt paar lehekülge koodi). Selliseid näitekoode võib täiesti otse kasutada.
Server tuleb realiseerida ise, kasutades võrgust leitavaid näiteid mikro-http-serveri jaoks (tüüpiliselt paar lehekülge koodi). Selliseid näitekoode võib täiesti otse kasutada.
58. rida: 58. rida:
ning selgitavate tekstidega servereid leiad mh [http://onjava.com/pub/a/onjava/2003/04/23/java_webserver.html siit] ja
ning selgitavate tekstidega servereid leiad mh [http://onjava.com/pub/a/onjava/2003/04/23/java_webserver.html siit] ja
[http://fragments.turtlemeat.com/javawebserver.php siit].Loe java socketitest põhjalikumalt [http://download.oracle.com/javase/tutorial/networking/sockets/ siit]. Pythoni serverinäite [http://muharem.wordpress.com/2007/05/29/roll-your-own-server-in-50-lines-of-code/ saad siit]; [https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/ lühem ja uuem]. Http kohta võib lugeda [http://www.jmarshall.com/easy/http/ näiteks siit].
[http://fragments.turtlemeat.com/javawebserver.php siit].Loe java socketitest põhjalikumalt [http://download.oracle.com/javase/tutorial/networking/sockets/ siit]. Pythoni serverinäite [http://muharem.wordpress.com/2007/05/29/roll-your-own-server-in-50-lines-of-code/ saad siit]; [https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/ lühem ja uuem]. Http kohta võib lugeda [http://www.jmarshall.com/easy/http/ näiteks siit].
Märkus: sõltuvalt rakendusest võib siiski vaja minna ka POST päringuid, aga selle saab hiljem lisada analoogselt GET-ile.


== Rakenduse ideed ==
== Rakenduse ideed ==

Redaktsioon: 18. september 2016, kell 09:42

Ülesandeks on implementeerida lihtne P2P protokoll (rakendus selgub lähiajal)

  • realiseeritud HTTP protokolli peale (vaja implementeerida ka HTTP server ja klient)
  • hakkab tööle virtuaalses võrgus (https://rangeforce.com/)
  • eesmärk kõigi rakendused omavahel suhtlema ja ühise võrguna tegutsema panna

Ettevalmistus

Vali arenduseks töövahend: virtuaallaboris on olemas Java (+maven) ning Python 3 tugi. Muud keeled (Haskell, C, Javascript, C#) eeldavad, et tudeng saab ise arenduskeskkonna tööle. Seda on kasulik kohe alguses testida. Virtuaalmasinas jookseb Ubuntu desktop 16.04.

Tee avalikku git SCM teenusesse uus repo. Sobivad teenused on http://gitlab.com, http://github.com, http://bitbucket.com .

Leia tehtud repo URI. Näiteks: git@gitlab.com:priitj/test3.git (SSH), https://gitlab.com/priitj/test3.git (HTTPS).

Üle SSH protokolli reposse pöördumiseks on vaja täiendavalt teha SSH võti. Selleks vaata juhendeid, näit. Githubi puhul https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ ; https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ (need juhendid sisaldavad ka konfi Windowsi/Linuxi/Maci git kliendi jaoks).

Töö käigus repo kasutamiseks on kaks alternatiivi:

  1. IDE-sse integreeritud giti klient. IntelliJ/PyCharm puhul tee uus projekt selliselt, et vali VCS->Checkout from Version Control->Git, pane URI (SSH või HTTPS oma) ning uus kataloog. Siis "Clone" ning edaspidi on projekti töökataloog juba seotud eelnevalt tehtud repoga.
  2. Käsurea git klient (GIT bash Windowsi all või git käsk Linuxi/Maci all). Sel puhul järgi Gitlabi/Githubi/Bitbucketi juhiseid repo kohalikku arvutisse kloonimiseks ning selle initsialiseerimiseks.

Virtuaallabor

HTTP server/klient

HTTP baasil töötav protokoll näeb välja umbes järgmine:

 GET http://1.2.3.4/request?param1=val1&param2=val2
 POST http://1.2.3.5/response?param1=val1&param3=val3

jne. Seega tuleb meil teha:

  1. HTTP server, mis suudaks vastu võtta GET ja POST päringut ning parseerida pathi ja parameetrid (query stringi). Meid huvitab ka IP, kust päring tuli, see tuleb edaspidi kasutamiseks meelde jätta. POST päringu puhul peab lugema päringu "keha" (body).
  2. Selle peale peaks serveris käivituma mingi funktsioon. Selle võime jätta hetkel tühjaks
  3. Lõpuks saadame vastuse samuti HTTP päringuga. Seega vaja selleks HTTP klienti.

Server tuleb realiseerida ise, kasutades võrgust leitavaid näiteid mikro-http-serveri jaoks (tüüpiliselt paar lehekülge koodi). Selliseid näitekoode võib täiesti otse kasutada.

C jaoks on sobiv mikroserver näiteks tiny, java jaoks sobib alustuseks sisseehitatud HTTP server. Socketi tasemel alternatiividest on see server väga hea väike näide, aga selgitava tekstita, ning selgitavate tekstidega servereid leiad mh siit ja siit.Loe java socketitest põhjalikumalt siit. Pythoni serverinäite saad siit; lühem ja uuem. Http kohta võib lugeda näiteks siit.

Rakenduse ideed

  • masspäringute hajutamine
  • content distribution (streaming)
  • maksed
  • maatriksite korrutamine
  • anonümiseeriv võrk

Protokoll

Päringu saamise kinnitus. Peale iga HTTP requesti saamist vastab P2P node tekstiga "OK" juhul kui ei olnud viga ning tekstiga "Error: xxxxxxxxxxx" kui oli viga (xxxxxxxxxxx tähistab vabas vormis vea kirjeldust ning selle võib ka ära jätta).

Praktikumi kirjeldus täieneb jooksvalt semestri käigus