SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Szybciej, niż Struś Pędziwiatr
WebSockets w aplikacjach webowych
Krzysztof Rychlicki-Kicior
Jack of all trades @
Ph.D. student & T.A. @ Politechnika Łódzka
Plan prezentacji
• Protokół HTTP i jego ograniczenia
• Ramki, Java, AJAX, czyli jak to dawniej bywało
• WebSockets – komunikacyjna magia teraz w Twojej
przeglądarce
• Struś Pędziwiatr czy Wile E. Coyote – porównanie
wydajności
HTTP
• Żądanie + odpowiedź = …i żyli długo i szczęśliwie…
• …ale czy aby na pewno?
• HTTP powstał jako protokół do obsługi powiązanych
ze sobą dokumentów hipertekstowych – obecnie
jest używany w znacznie szerszym kontekście
HTTP – problemy
• Jedno połączenie na jeden zasób – rozwiązane (keep
alive)
• Bezstanowość (brak sesji) – rozwiązane (sesje,
udostępniane przez popularne frameworki webowe)
• Jednostronność komunikacji – to klient decyduje o
komunikacji z serwerem – ?
• Wydajność – protokół HTTP wprowadza spory narzut,
który utrudnia komunikację w czasie rzeczywistym – ?
Powrót do przeszłości
• Przedstawione ograniczenia są znane od dawna i w
rozmaity sposób próbowano sobie z nimi radzić
• Rozwiązania można podzielić na dwie grupy:
natywne i wtyczki
• Do rozwiązań natywnych można zaliczyć iframe,
AJAX, rozwiązania typu long-polling
• Najpopularniejsze rozwiązania zewnętrzne opierały
się o applety Javy i aplikacje Flashowe
Ramki (iframe)
• Jedna z uniwersalnych metod
• Niewidoczna ramka (np. wymiary 0x0) wysyła
żądania cyklicznie lub na zasadzie tzw. forever
frame
AJAX
• Tradycyjnie AJAX jest używany do wykonywania
żądań "w tle"
• Dzięki zdarzeniu onreadystatechange, istnieje
możliwość przesyłania cząstkowych odpowiedzi,
podobnie jak w przypadku ramki
• Problem w tym podejściu (podobnie jak forever
frame) wynika z owego braku ograniczeń
Long polling
• Rozwiązanie stanowią techniki oparte o long-polling
• Żądanie jest utrzymywane dopóty, dopóki nie
zostaną przesłane dane, jednak z pewnym
czasowym ograniczeniem.
• W razie braku otrzymanych danych, klient ponawia
żądanie
Long polling – AJAX
• Nie jest to stricte nowa technika
• Sposób zastosowania AJAX-a zgodnie z założeniami
long pollingu
Long polling – JSONP
• AJAX nie może być powszechnie używany do
wywołań międzyserwerowych (cross-domain)
• Możliwość taką daje importowanie skryptów za
pomocą znacznika <script>:
<script src="http://serwer/uzytkownicy/1?callback=odpowiedz"
type="text/javascript"></script>
<script>
function odpowiedz(dane)
{
// skorzystaj z obiektu dane
}
</script>
Long polling – JSONP
• Serwer nie zwraca wyłącznie obiektu w formacie
JSON
• Konieczne jest "opakowanie" go w wywołanie
funkcji – w efekcie w kodzie strony jest importowany
następujące wywołanie:
odpowiedz({"ID":1, "Login":"jan12345"});
Rozwiązania zewnętrzne
• Java i applety – które królowały w latach 90. –
zapewniały wydajną komunikację za pomocą
gniazd TCP
• Konieczność posiadania Javy
• Dostępność dodatkowych portów
• Odrębna infrastruktura po stronie serwera
Rozwiązania zewnętrzne
• Pozostałe wady appletów:
o utrudniona komunikacja z resztą strony internetowej
o niespójny interfejs użytkownika
o certyfikaty, ostrzeżenia, etc…
Rozwiązania zewnętrzne
• Z nastaniem nowego wieku popularność zyskała
technologia Adobe Flash
• Zalety i wady podobne, jak w przypadku Javy
• Oprócz klasycznych gniazd TCP, Flash (a dokładnie
Flex) oferuje wsparcie dla wydajnych metod
integracji klientów i serwera (np. BlazeDS)
Nowe koncepcje
• Server-sent Events – serwer otrzymuje w pełni
funkcjonalne narzędzie do przesyłania
komunikatów do klientów
• SSE nie są obsługiwane w IE, a ponadto umożliwiają
one jedynie komunikację od serwera do klienta
• WebSockets – pozwalają na dwustronną
komunikację pomiędzy klientem, a serwerem, za
pomocą dedykowanego protokołu
WebSockets
• Dwukierunkowy kanał komunikacyjny, który
pozwala na przesyłanie danych z minimalnym
narzutem, w porównaniu do klasycznego protokołu
HTTP
• NIE jest to implementacja klasycznych gniazd TCP
ani UDP, mimo że zasada działania jest podobna
• Nie jest ograniczony tylko do przeglądarki: można
pisać aplikacje desktopowe z wykorzystaniem
zewnętrznych bibliotek, np. Jetty (w Javie)
WebSockets
Procedura nawiązania połączenia WebSockets:
1. Klient wysyła zwykłe żądanie HTTP pod adres URI
spełniający wymagania WebSockets:
2. Żądanie zawiera prośbę o wykonanie tzw.
Upgrade w celu rozpoczęcia komunikacji
dwukierunkowej w trybie full-duplex
3. Komunikacja dwukierunkowa jest prowadzona
niezależnie od innych żądań kierowanych do
serwera
ws://serwer.com/gra
WebSockets
• Połączenie WebSocket jest zrywane w momencie
przeładowania lub przejścia do innej strony
• Z tego względu, aplikacje intensywnie
wykorzystujące WS funkcjonują w obrębie jednej
strony
WebSockets
• Gniazda webowe pozwalają na transfer danych
tekstowych, jak i binarnych
• Podobnie jak w przypadku protokołu HTTP, tak i
WebSockety potrafią korzystać z protokołu SSL.
Zakładając wsparcie po stronie serwera, w kodzie
klienta wystarczy zastosować scheme wss.
WebSockets
• Po stronie serwera, WebSockety muszą być
zaimplementowane dodatkowo.
• Wsparcie dla WS jest obecne w licznych
technologiach server-side, takich jak Java EE 7,
ASP.NET czy Node.js
WebSockets
• Implementacja po stronie klienta jest trywialna:
var socket = new WebSocket("ws://localhost/czat");
socket.onmessage = function(evt) {
// korzystaj z evt.data
}
socket.send('Hello, World!’);
WebSockets
• Również po stronie serwera obsługa nie sprawia
zazwyczaj problemu:
@ServerEndpoint(value="/czat")
public class CzatEndpoint {
@OnMessage
public void handle(String msg, Session ses){
}
// pozostałe adnotacje: @OnOpen, @OnClose,
// @OnError
}
WebSockets
• W porównaniu do tradycyjnych gniazd sieciowych,
WebSockety oferują znacznie bardziej przejrzyste
API:
o otwarcie sesji
o zamknięcie sesji
o wysłanie komunikatu
o odebranie komunikatu
o obsługa błędów
Wydajność
• Jedną z kluczowych zalet WebSocketów jest ich
wydajność, zwłaszcza w przypadku przesyłania
dużej liczby małych komunikatów
• W takich sytuacjach narzut związany z
wykonywaniem żądań HTTP staje się ogromny
Wydajność
• Na potrzeby niniejszej prezentacji wykonałem
proste testy z wykorzystaniem technologii Node.JS i
biblioteki Socket.IO
• Socket.IO pozwala na stosowanie różnych
transportów przezroczyście dla programisty
• Obecnie, Socket.IO udostępnia WebSockety i XHR-
polling
Wydajność
• Scenariusz: 500 komunikatów przesyłanych
sekwencyjnie
• Testy były przeprowadzane lokalnie, aby
zlikwidować niepotrzebne opóźnienie
• Wyniki:
o WebSockets – 2542 ms
o XHR-polling – 12431 ms
Praktyczne zastosowania
• Narzędzia do komunikacji w czasie rzeczywistym
(czaty, narzędzia do pracy wspólnej – wirtualne
tablice, itd.)
• Gry
• Aplikacje finansowe
Masz pytania?
krzysztof@makimo.pl

Weitere ähnliche Inhalte

Was ist angesagt?

Tomasz Paszkowski - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...
Tomasz Paszkowski  - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...Tomasz Paszkowski  - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...
Tomasz Paszkowski - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...PROIDEA
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...GOG.com dev team
 
Przetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychPrzetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychleafnode
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwLuke Adamczewski
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?GOG.com dev team
 
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...PROIDEA
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)GOG.com dev team
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w InternecieDivante
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...PROIDEA
 

Was ist angesagt? (20)

Tomasz Paszkowski - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...
Tomasz Paszkowski  - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...Tomasz Paszkowski  - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...
Tomasz Paszkowski - Loadbalancing ruchu HTTP w sieciach dostawców treści na ...
 
JRuby real use case
JRuby real use caseJRuby real use case
JRuby real use case
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
Przetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychPrzetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowych
 
WordCamp Gdynia 2016
WordCamp Gdynia 2016WordCamp Gdynia 2016
WordCamp Gdynia 2016
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Web Cache
Web CacheWeb Cache
Web Cache
 
The story of GOG.com Cache
The story of GOG.com Cache The story of GOG.com Cache
The story of GOG.com Cache
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?
 
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
W 3 sekundy do setki
W 3 sekundy do setkiW 3 sekundy do setki
W 3 sekundy do setki
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w Internecie
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...
PLNOG 3: Krzysztof Góźdź - Petabajtowe systemy przechowywania danych dla dost...
 

Andere mochten auch

「Callingood(コーリングッド)」のご案内資料です。
「Callingood(コーリングッド)」のご案内資料です。「Callingood(コーリングッド)」のご案内資料です。
「Callingood(コーリングッド)」のご案内資料です。Yuta Suenaga
 
3Com 7900-000.017-1.00
3Com 7900-000.017-1.003Com 7900-000.017-1.00
3Com 7900-000.017-1.00savomir
 
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...grssieee
 
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_s
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_sDerzhavnij standart bazovoji_i_povnoji_zagalnoji_s
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_sgrechanik
 
Slidedebate200611
Slidedebate200611Slidedebate200611
Slidedebate200611thaitrl
 

Andere mochten auch (18)

CDP-Prabin Tamang4
CDP-Prabin Tamang4CDP-Prabin Tamang4
CDP-Prabin Tamang4
 
ocd ppt ASSIGNMENT
ocd ppt ASSIGNMENTocd ppt ASSIGNMENT
ocd ppt ASSIGNMENT
 
「Callingood(コーリングッド)」のご案内資料です。
「Callingood(コーリングッド)」のご案内資料です。「Callingood(コーリングッド)」のご案内資料です。
「Callingood(コーリングッド)」のご案内資料です。
 
квіти
квітиквіти
квіти
 
Video analysis
Video analysisVideo analysis
Video analysis
 
folder management
folder managementfolder management
folder management
 
3Com 7900-000.017-1.00
3Com 7900-000.017-1.003Com 7900-000.017-1.00
3Com 7900-000.017-1.00
 
lzonepsu
lzonepsu lzonepsu
lzonepsu
 
Kuis p kn
Kuis p knKuis p kn
Kuis p kn
 
Smart Goals
Smart GoalsSmart Goals
Smart Goals
 
Tο τείχος του βερολίνου
Tο τείχος του βερολίνουTο τείχος του βερολίνου
Tο τείχος του βερολίνου
 
Día de san valentín
Día de san valentínDía de san valentín
Día de san valentín
 
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...
MODELING DAILY NET SHORTWAVE RADIATION OVER RUGGED SURFACES USING MODIS ATMOS...
 
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_s
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_sDerzhavnij standart bazovoji_i_povnoji_zagalnoji_s
Derzhavnij standart bazovoji_i_povnoji_zagalnoji_s
 
Slidedebate200611
Slidedebate200611Slidedebate200611
Slidedebate200611
 
FORUM PORTUGAL ENERGY POWER: "Mais eficiência, Maior Competitividade em Portu...
FORUM PORTUGAL ENERGY POWER: "Mais eficiência, Maior Competitividade em Portu...FORUM PORTUGAL ENERGY POWER: "Mais eficiência, Maior Competitividade em Portu...
FORUM PORTUGAL ENERGY POWER: "Mais eficiência, Maior Competitividade em Portu...
 
Toetsen in de elo
Toetsen in de eloToetsen in de elo
Toetsen in de elo
 
Planetas
PlanetasPlanetas
Planetas
 

Ähnlich wie 4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach webowych - Krzysztof Rychlicki-Kicior

integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...Nazar Patrylo
 
Citrix provisioning services
Citrix provisioning servicesCitrix provisioning services
Citrix provisioning servicesPawel Serwan
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?tkryskiewicz
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkitbartosz_w
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PROIDEA
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PROIDEA
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPROIDEA
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.jsWojciech Kaniuka
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
[PLCUG] Power shell (PL)
[PLCUG] Power shell (PL)[PLCUG] Power shell (PL)
[PLCUG] Power shell (PL)Jaroslaw Sobel
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzkeGaldoMedia
 

Ähnlich wie 4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach webowych - Krzysztof Rychlicki-Kicior (20)

integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
 
AJAX - wdw1
AJAX - wdw1AJAX - wdw1
AJAX - wdw1
 
Citrix provisioning services
Citrix provisioning servicesCitrix provisioning services
Citrix provisioning services
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Jaki hosting pod wordpressa
Jaki hosting pod wordpressaJaki hosting pod wordpressa
Jaki hosting pod wordpressa
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
[PLCUG] Power shell (PL)
[PLCUG] Power shell (PL)[PLCUG] Power shell (PL)
[PLCUG] Power shell (PL)
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzke
 

4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach webowych - Krzysztof Rychlicki-Kicior

  • 1. Szybciej, niż Struś Pędziwiatr WebSockets w aplikacjach webowych Krzysztof Rychlicki-Kicior Jack of all trades @ Ph.D. student & T.A. @ Politechnika Łódzka
  • 2. Plan prezentacji • Protokół HTTP i jego ograniczenia • Ramki, Java, AJAX, czyli jak to dawniej bywało • WebSockets – komunikacyjna magia teraz w Twojej przeglądarce • Struś Pędziwiatr czy Wile E. Coyote – porównanie wydajności
  • 3. HTTP • Żądanie + odpowiedź = …i żyli długo i szczęśliwie… • …ale czy aby na pewno? • HTTP powstał jako protokół do obsługi powiązanych ze sobą dokumentów hipertekstowych – obecnie jest używany w znacznie szerszym kontekście
  • 4. HTTP – problemy • Jedno połączenie na jeden zasób – rozwiązane (keep alive) • Bezstanowość (brak sesji) – rozwiązane (sesje, udostępniane przez popularne frameworki webowe) • Jednostronność komunikacji – to klient decyduje o komunikacji z serwerem – ? • Wydajność – protokół HTTP wprowadza spory narzut, który utrudnia komunikację w czasie rzeczywistym – ?
  • 5. Powrót do przeszłości • Przedstawione ograniczenia są znane od dawna i w rozmaity sposób próbowano sobie z nimi radzić • Rozwiązania można podzielić na dwie grupy: natywne i wtyczki • Do rozwiązań natywnych można zaliczyć iframe, AJAX, rozwiązania typu long-polling • Najpopularniejsze rozwiązania zewnętrzne opierały się o applety Javy i aplikacje Flashowe
  • 6. Ramki (iframe) • Jedna z uniwersalnych metod • Niewidoczna ramka (np. wymiary 0x0) wysyła żądania cyklicznie lub na zasadzie tzw. forever frame
  • 7. AJAX • Tradycyjnie AJAX jest używany do wykonywania żądań "w tle" • Dzięki zdarzeniu onreadystatechange, istnieje możliwość przesyłania cząstkowych odpowiedzi, podobnie jak w przypadku ramki • Problem w tym podejściu (podobnie jak forever frame) wynika z owego braku ograniczeń
  • 8. Long polling • Rozwiązanie stanowią techniki oparte o long-polling • Żądanie jest utrzymywane dopóty, dopóki nie zostaną przesłane dane, jednak z pewnym czasowym ograniczeniem. • W razie braku otrzymanych danych, klient ponawia żądanie
  • 9. Long polling – AJAX • Nie jest to stricte nowa technika • Sposób zastosowania AJAX-a zgodnie z założeniami long pollingu
  • 10. Long polling – JSONP • AJAX nie może być powszechnie używany do wywołań międzyserwerowych (cross-domain) • Możliwość taką daje importowanie skryptów za pomocą znacznika <script>: <script src="http://serwer/uzytkownicy/1?callback=odpowiedz" type="text/javascript"></script> <script> function odpowiedz(dane) { // skorzystaj z obiektu dane } </script>
  • 11. Long polling – JSONP • Serwer nie zwraca wyłącznie obiektu w formacie JSON • Konieczne jest "opakowanie" go w wywołanie funkcji – w efekcie w kodzie strony jest importowany następujące wywołanie: odpowiedz({"ID":1, "Login":"jan12345"});
  • 12. Rozwiązania zewnętrzne • Java i applety – które królowały w latach 90. – zapewniały wydajną komunikację za pomocą gniazd TCP • Konieczność posiadania Javy • Dostępność dodatkowych portów • Odrębna infrastruktura po stronie serwera
  • 13. Rozwiązania zewnętrzne • Pozostałe wady appletów: o utrudniona komunikacja z resztą strony internetowej o niespójny interfejs użytkownika o certyfikaty, ostrzeżenia, etc…
  • 14. Rozwiązania zewnętrzne • Z nastaniem nowego wieku popularność zyskała technologia Adobe Flash • Zalety i wady podobne, jak w przypadku Javy • Oprócz klasycznych gniazd TCP, Flash (a dokładnie Flex) oferuje wsparcie dla wydajnych metod integracji klientów i serwera (np. BlazeDS)
  • 15. Nowe koncepcje • Server-sent Events – serwer otrzymuje w pełni funkcjonalne narzędzie do przesyłania komunikatów do klientów • SSE nie są obsługiwane w IE, a ponadto umożliwiają one jedynie komunikację od serwera do klienta • WebSockets – pozwalają na dwustronną komunikację pomiędzy klientem, a serwerem, za pomocą dedykowanego protokołu
  • 16. WebSockets • Dwukierunkowy kanał komunikacyjny, który pozwala na przesyłanie danych z minimalnym narzutem, w porównaniu do klasycznego protokołu HTTP • NIE jest to implementacja klasycznych gniazd TCP ani UDP, mimo że zasada działania jest podobna • Nie jest ograniczony tylko do przeglądarki: można pisać aplikacje desktopowe z wykorzystaniem zewnętrznych bibliotek, np. Jetty (w Javie)
  • 17. WebSockets Procedura nawiązania połączenia WebSockets: 1. Klient wysyła zwykłe żądanie HTTP pod adres URI spełniający wymagania WebSockets: 2. Żądanie zawiera prośbę o wykonanie tzw. Upgrade w celu rozpoczęcia komunikacji dwukierunkowej w trybie full-duplex 3. Komunikacja dwukierunkowa jest prowadzona niezależnie od innych żądań kierowanych do serwera ws://serwer.com/gra
  • 18. WebSockets • Połączenie WebSocket jest zrywane w momencie przeładowania lub przejścia do innej strony • Z tego względu, aplikacje intensywnie wykorzystujące WS funkcjonują w obrębie jednej strony
  • 19. WebSockets • Gniazda webowe pozwalają na transfer danych tekstowych, jak i binarnych • Podobnie jak w przypadku protokołu HTTP, tak i WebSockety potrafią korzystać z protokołu SSL. Zakładając wsparcie po stronie serwera, w kodzie klienta wystarczy zastosować scheme wss.
  • 20. WebSockets • Po stronie serwera, WebSockety muszą być zaimplementowane dodatkowo. • Wsparcie dla WS jest obecne w licznych technologiach server-side, takich jak Java EE 7, ASP.NET czy Node.js
  • 21. WebSockets • Implementacja po stronie klienta jest trywialna: var socket = new WebSocket("ws://localhost/czat"); socket.onmessage = function(evt) { // korzystaj z evt.data } socket.send('Hello, World!’);
  • 22. WebSockets • Również po stronie serwera obsługa nie sprawia zazwyczaj problemu: @ServerEndpoint(value="/czat") public class CzatEndpoint { @OnMessage public void handle(String msg, Session ses){ } // pozostałe adnotacje: @OnOpen, @OnClose, // @OnError }
  • 23. WebSockets • W porównaniu do tradycyjnych gniazd sieciowych, WebSockety oferują znacznie bardziej przejrzyste API: o otwarcie sesji o zamknięcie sesji o wysłanie komunikatu o odebranie komunikatu o obsługa błędów
  • 24. Wydajność • Jedną z kluczowych zalet WebSocketów jest ich wydajność, zwłaszcza w przypadku przesyłania dużej liczby małych komunikatów • W takich sytuacjach narzut związany z wykonywaniem żądań HTTP staje się ogromny
  • 25. Wydajność • Na potrzeby niniejszej prezentacji wykonałem proste testy z wykorzystaniem technologii Node.JS i biblioteki Socket.IO • Socket.IO pozwala na stosowanie różnych transportów przezroczyście dla programisty • Obecnie, Socket.IO udostępnia WebSockety i XHR- polling
  • 26. Wydajność • Scenariusz: 500 komunikatów przesyłanych sekwencyjnie • Testy były przeprowadzane lokalnie, aby zlikwidować niepotrzebne opóźnienie • Wyniki: o WebSockets – 2542 ms o XHR-polling – 12431 ms
  • 27. Praktyczne zastosowania • Narzędzia do komunikacji w czasie rzeczywistym (czaty, narzędzia do pracy wspólnej – wirtualne tablice, itd.) • Gry • Aplikacje finansowe