3. HTTP
World Wide Web alapját képező protokoll
Első dokumentált verzió 1991-ből származik
Kérés-válasz alapú kommunikáció kliens és szerver között
Állapot nélküli (stateless) protokoll
4. Problémák a HTTP-vel
Mindig a kliens a kommunikációt kezdeményező fél
Böngészőben mindig teljes oldalletöltés történik
Klasszikus HTTP response lezárja a TCP socket-et
Nem alkalmas alacsony válaszidejű működésre
Zajos protokoll (headerek, cookie-k mérete)
Konkurrens kliensek száma Átlagos header méret Sávszélesség igény
1 000 871 000 6,8 Mbps
10 000 8 710 000 68 Mbps
100 000 87 100 000 680 Mbps
6. Ajax
Aszinkron Javascript, részleges oldalfrissítés
Cél:
a felhasználói élmény fokozása
sávszélesség csökkentése
sebesség növelése
Web Performance Inc. 2006-os tanulmánya:
Probléma: még mindig a kliens kezdeményez
Működési elv Első oldal méret Átlagos oldal méret Szumma méret
HTTP 44k 10k 210k
HTTP + Ajax 47k 2.5k 81k
Sávszélesség megtakarítás: 61% fölött!
7. Ajax polling
Hogyan jut el a kliensre a szerveroldalon frissült adat?
Megoldás: kliens oldalon időzített, ismétlődő request-ek
Problémák:
Felesleges hálózati forgalom
Nagy sávszélesség igény
Felesleges terhelés a szerveroldalon
8. Long polling
Ajax alapú trükk szerver oldali „push” szimulálására
Hagyományos polling, de a szerver kivár a válasszal…
9. WebSocket
HTTP-tól független TCP protokoll
Kétirányú, perzisztens, full-duplex csatorna kliens és szerver között
2011 óta szabvány: RFC 6455
80-as TCP porton működik -> nincs tűzfal/proxy probléma
A küldés/fogadás üzenet alapú
Üzenetek technikailag frame-ekre bontva utaznak (6 byte-os header!)
10. WebSocket kapcsolat felépítése
HTTP kérés:
GET /wstest HTTP/1.1
Host: server.example.com
Sec-WebSocket-Version:"13"
Sec-WebSocket-Key:"2yJIeg5iwroBBmCpUPCy+A=="
Connection: keep-alive, Upgrade
Upgrade: websocket
HTTP válasz:
HTTP/1.1 101 Switching Protocols
Sec-WebSocket-Accept:"jT2uT0a6MYwabx3iWngsre6+Gpw="
Connection: Upgrade
Upgrade: WebSocket
Ezzel a handshake-kel a kommunikáció átvált a WebSocket protokollra
11. Secure WebSocket
ws:// és wss:// URI prefixek (WebSocket Secure)
TLS titkosítás (SSL utódja)
12. WebSocket – miért jobb?
Kétirányú duplex kapcsolat
Szerver is tud kommunikációt kezdeményezni
Nincs HTTP/TCP kapcsolat lebontás és újraépítés
Perzisztens, biztonságos
Nincs HTTP header küldés minden requestnél
(cookie-k, content-type, user-agent, stb)
HTTP request header: 500-8000 byte
WebSocket frame header: 6 byte
16. WebSocket alapú fejlesztés
Szerver oldalon:
Java EE 7 óta a Java Enterprise szabvány része (Servlet API 3.1)
Akka + Play Framework (Scala)
Atmosphere framework (Java)
stb.
Kliens oldalon támogatott böngészőkben natív JavaScript API
Egyszerű, magas szintű API
Esemény alapú, callback függvények