Node.js: na czym polega sterowanie zdarzeniami w serwerze WWW?
Coraz popularniejszy framework I/O Node.js – implementacja engine'u V8 JavaScriptu po stronie serwera – może służyć do zbudowania serwera WWW sterowanego zdarzeniami. To coś zupełnie innego od tradycyjnych serwerów, takich jak Apache, które działają w oparciu o wątki.
Uruchamiając Apache deklarujemy ile wątków ma obsługiwać zapytania. Dany wątek jest zablokowany do czasu, aż obsłuży zapytanie i zwróci wynik.
Dodatkowo każdy wątek ma swoją kolejkę zapytań, które po kolei realizuje. Rodzi to pewne konsekwencje. Na przykład jeżeli jedno z zapytań będzie trwało 10 minut, cała kolejka zapytań do tego wątku będzie musiała czekać przynajmniej 10 minut.
Jest to skrajna nieefektywność, ponieważ w czasie gdy np. baza danych pobiera dane potrzebne do obsłużenia zapytania, wątek serwera mógłby obsługiwać kolejne zapytania i poinformować autora zapytania 10-minutowego, kiedy zostanie ono zrealizowane.
Tim Caswell w 102. odcinku podcastu Herding Code wyjaśnił przystępnie tę różnicę, stosując metaforę recepcji i jadłodajni.
Tradycyjny model na bazie wątków to recepcja: recepcjonista obsługuje pacjenta tak długo, aż zakończy jego obsługę. Ujmując to inaczej: jeżeli pacjent musi wypełnić formularz – robi to przy recepcjoniście. Jest on przez cały ten czas zablokowany przez pacjenta.
Również osoby ustawiające się w kolejce muszą czekać, aż pacjent skończy wypełniać dokumenty.
Aby skalować taki system, trzeba zwiększyć przestrzeń recepcji i dodać kolejne okienka.
W modelu sterowanym zdarzeniami sytuacja wyglądałaby zupełnie inaczej. Kiedy pacjent musi wypełnić formularze, dostaje je i opuszcza kolejkę. Siada w poczekalni i uzupełnia informacje. Kiedy jest gotowy wraca do recepcjonisty, aby złożyć je, albo zadać dodatkowe pytania.
Brak marnotrawstwa czasu recepcjonisty i oczekiwania pozostałych pacjentów sprawia, że taki system lepiej się skaluje.
Analogicznie wygląda sytuacja w wypadku jadłodajni. W tradycyjnych jadłodajniach podchodzi się do lady, zamawia obiad i stoi tam tak długo, aż zostanie on wydany. Gdy jadłodajnia jest zarządzana zdarzeniami, po zamówieniu i opłaceniu zamówienia, klient może usiąść przy stole i zostanie poinformowany, że może swoje danie już odebrać przez wywołanie jego nazwiska. W wielu językach takie wywołanie nazywa się wywołaniem zwrotnym (ang. callback function).
Najważniejsze jest to, że klient nie blokuje osoby przyjmującej zamówienia.
Node.js działa właśnie w ten sposób:
1. Wpisujesz w przeglądarkę adres pliku /about.html znajdującego sie na serwerze Node.js,
2. Serwer akceptuje zapytanie i wywołuje funkcję służącą do pobrania pliku z dysku,
3. Kiedy serwer czeka na plik, obsługuje następne zapytanie,
4. Kiedy serwer otrzyma plik, dodaje wywołanie zwrotne do kolejki zadań,
5. Serwer wywołuje funkcję, która spowoduje wyrenderowanie pliku about.html i wysłanie go do przeglądarki.
Tim zwraca uwagę również, że w przypadku wysoko skalowalnych serwerów liczą się nawet mikrosekundy, nawet jeżeli wczytanie pliku może wydawać się szybką operacją.
źródło: code.danyork.com
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
19
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
m_gol @_Igancio:
Chyba pomyliłeś gazetę z natemat.pl...
m_gol Niestety na razie nie wszędzie Flasha da się zastąpić, nawet w takich...
stop_gupota "Fanatyczny" Diablo 3 jest dopiero od 10 dni.
Mas Ciekawa informacja, ale akurat projekt wytopu stali przez chłopów to był...
_Igancio Poziom artykułu jest bardzo niski ! Niczego się nie dowiedziałem , wygląda...
voluu A ja mam problem. MIanowicie, po dodaniu kodu z tego poradnika miniaturki...
Sebek Pozycjonowanie stron za pośrednictwem firm oferujących
swoje usługi nie...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |









#1 Magik 2011-01-26 13:56:57 0
IP: 157.25.200.[...] Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101207 Lightning/1.0b2 Thunderbird/3.1.7 ThunderBrowse/3.3.4
#2 vincent 2011-01-26 14:07:27 0
IP: 87.207.249.[...] Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13
#3 Wszerad 2011-01-26 14:31:22 0
IP: 213.17.128.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b10pre) Gecko/20110125 Firefox/4.0b10pre
#4 Magik 2011-01-26 15:34:32 0
IP: 157.25.200.[...] Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101207 Lightning/1.0b2 Thunderbird/3.1.7 ThunderBrowse/3.3.4
#5 mapi 2011-01-28 16:56:27 0
IP: 194.149.230.[...] Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
#6 baglad10r aligato01r 2011-03-10 20:12:45 0
IP: 95.108.81.[...] Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10
#7 Jacek Olszak 2012-01-11 22:52:56 1
IP: 85.222.32.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#8 slawek22 2012-01-12 02:51:41 0
IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#9 Jacek Olszak® 2012-01-12 20:02:26 0
IP: 85.222.32.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#10 Jacek Olszak® 2012-01-12 20:11:37 0
IP: 85.222.32.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#11 slawek22 2012-01-12 20:46:05 0
IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#12 slawek22 2012-01-12 20:51:34 0
IP: 83.4.102.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#13 Jacek Olszak® 2012-01-12 22:20:04 0
IP: 85.222.32.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#14 slawek22 2012-01-12 22:35:15 0
IP: 83.4.102.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#15 Jacek Olszak® 2012-01-12 23:18:54 0
IP: 85.222.32.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#16 slawek22 2012-01-13 03:15:24 0
IP: 83.4.102.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#17 Jacek Olszak® 2012-01-13 10:12:47 0
IP: 62.181.161.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#18 slawek22 2012-01-13 15:45:49 0
IP: 83.4.102.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#19 Jacek Olszak® 2012-01-13 16:30:45 0
IP: 62.181.161.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#20 slawek22 2012-01-13 19:35:38 0
IP: 83.4.102.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
#21 Jigga 2012-02-23 00:52:39 0
IP: 46.151.136.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.10.229 Version/11.61