]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/commitdiff
cviceni/server: Úprava zadání
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 6 Apr 2016 22:25:26 +0000 (00:25 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 6 Apr 2016 22:25:35 +0000 (00:25 +0200)
cviceni/server.mdwn

index 2f0da23a239f3147bae2b8c5c0acdb19effb47ca..f750a4def72de4aa91ddabfb91128b4f0283c39e 100644 (file)
@@ -25,7 +25,7 @@ server jsou kladeny následující požadavky:
 
 - Klienti posílají data pomocí [metody POST][POST] s cestou
   `/osp/myserver/data`. Data jsou ve formátu čistého textu
-  (text/plain) v kódování UTF-8.
+  (text/plain) v kódování UTF-8 komprimovaného metodou [gzip][gzip].
 - Server obsahuje "čítač jedinečných slov". Při spuštění serveru je
   tento čítač roven 0.
 - Server si vede evidenci o slovech zaslaných v jednotlivých
@@ -40,21 +40,26 @@ server jsou kladeny následující požadavky:
 [HTTP]: http://tools.ietf.org/html/rfc2616
 [POST]: http://tools.ietf.org/html/rfc2616#section-9.5
 [GET]: http://tools.ietf.org/html/rfc2616#section-9.3
+[gzip]: https://tools.ietf.org/html/rfc1952
 
 Příklad
 -------
 
-Předpokládejme, že náš server běží na adrese 127.0.0.1 (t.j.
-localhost) na portu 8000. Použijeme program `curl` k posílání
+Předpokládejme, že náš server běží na lokálním počítači (t.j.
+localhost) na portu 8080. Použijeme program `curl` k posílání
 požadavků serveru:
 
-    curl 127.0.0.1:8000/osp/myserver/data --data-binary "první pokus"
-    curl 127.0.0.1:8000/osp/myserver/data --data-binary "druhý pokus"
-    curl 127.0.0.1:8000/osp/myserver/count --output -
+    curl localhost:8080/osp/myserver/data --data-binary @<(echo první pokus|gzip)
+    curl localhost:8080/osp/myserver/data --data-binary @<(echo druhý pokus|gzip)
+    curl localhost:8080/osp/myserver/count --output -
 
 Výstupem posledního příkazu bude řetězec "3". Místo posledního příkazu
 můžete použít i webový prohlížeč nasměrovaný na adresu
-<http://127.0.0.1:8000/osp/myserver/count>.
+<http://localhost:8000/osp/myserver/count>.
+
+*Poznámka:* Syntaxe `<(příkaz...)` je tzv. *process substitution* v
+interpreteru `bash`. Jedná se o jeden z možných způsobů předání
+binárních dat na příkazové řádce.
 
 Výkon serveru
 -------------
@@ -79,6 +84,7 @@ referenci či startovací bod pro vaší implementaci.
 #!/usr/bin/python3
 
 from http.server import HTTPServer, BaseHTTPRequestHandler
+import gzip
 
 words = {}
 
@@ -87,7 +93,7 @@ class OSPHTTPHandler(BaseHTTPRequestHandler):
         global words
         if self.path == "/osp/myserver/data":
             length = int(self.headers.get('Content-Length'))
-            text = self.rfile.read(length).decode("utf-8")
+            text = gzip.decompress(self.rfile.read(length)).decode("utf-8")
             for word in text.split():
                 words[word] = 1;
             self.send_response(204) # No Content
@@ -108,11 +114,21 @@ class OSPHTTPHandler(BaseHTTPRequestHandler):
             self.send_response(404)
             self.end_headers()
 
-httpd = HTTPServer(('', 8000), OSPHTTPHandler)
+class HTTPServerIPv6(HTTPServer):
+    import socket
+    address_family = socket.AF_INET6
+
+# httpd = HTTPServer(('', 8080), OSPHTTPHandler) # Use if your system uses IPv4 by default
+httpd = HTTPServerIPv6(('', 8080), OSPHTTPHandler) # Use if your system uses IPv6 by default
 print("Listening on port", httpd.server_port)
 httpd.serve_forever()
 """]]
 
+Pokud se k tomuto ukázkovému serveru připojí mnoho klientů, bude
+"přetížen" a čas od času bude klienty odmítat. Takže prvním krokem
+vašeho řešení může být zjištění příčiny tohoto chování a její
+napravení.
+
 Testování a měření výkonu
 =========================
 
@@ -124,17 +140,3 @@ nejlepších studentů dostane 1 až 5 bonusových bodů.
 **Odevzdávací systém běží momentálně v testovacím provozu.** Je možné,
 že naměřené hodnoty budou horší, než jaké lze z vašeho serveru
 "vymáčknout".
-
-Kromě odevzdávacího systému můžete použít i program
-`osp-server-tester`, který je nainstalován školních počítačích. Pro
-testování ukázkového serveru spusťte program následovně:
-
-    osp-server-tester localhost 8000
-
-Pokud testovací program spustíte následovně
-
-    osp-server-tester localhost 8000 --more
-
-ukázkový server bude přetížen a čas od času bude klienty odmítat.
-Takže prvním krokem vašeho řešení může být zjištění příčiny tohoto
-chování a její napravení.