Co to jest Node.js?
Nie bardzo rozumiem, co to jest
Node.js
http://en.wikipedia.org/wiki/Node.js... Może dlatego, że jestem głównie programistą internetowych aplikacji biznesowych. Co to jest i jaki jest pożytek z tego?
O ile rozumiem, wygląda to tak:
- Model programowania jest sterowany zdarzeniami, zwłaszcza w jaki sposób obsługuje wejście wyjście http://en.wikipedia.org/wiki/Input/output .
- On używa JavaScript http://en.wikipedia.org/wiki/JavaScripta parser to V8 http://en.wikipedia.org/wiki/V ... %2529 .
- Można go łatwo wykorzystać do tworzenia równoległych aplikacji serwerowych.
Czy moje rozumienie jest prawidłowe? Jeśli tak, jakie są zalety zdarzonych operacji we/wy - czy jest to po prostu bardziej równoległe? Ponadto, czy kierunek Node.js jest tą samą strukturą, co model programowania oparty na JavaScript (V8)?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
10 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Node.js w produkcji jest z pewnością możliwe, ale daleko mu do wdrożenia „pod klucz”, które wydawało się obiecane w dokumentacji. W przypadku Node.js v0.6.x „klaster” został zintegrowany z platformą, zapewniając jeden z głównych elementów składowych, ale mój skrypt „production.js” nadal zawiera ~ 150 linii logiki do obsługi takich rzeczy, jak tworzenie katalogu dziennika, recykling martwych pracowników, itp. W przypadku "poważnej" usługi produkcyjnej musisz być również przygotowany na dławienie przychodzących połączeń i robienie wszystkiego, co robi Apache
PHP
http://en.wikipedia.org/wiki/PHP... Aby być uczciwym
Ruby on Rails
http://en.wikipedia.org/wiki/Ruby_on_Rails
To ma
dokładnie
ten problem. Rozwiązuje się go za pomocą dwóch uzupełniających się mechanizmów: 1) umieszczenie Ruby on Rails/Node.js za dedykowanym serwerem sieciowym (napisanym w C i przetestowanym w piekle iz powrotem) jak
Nginx
http://en.wikipedia.org/wiki/Nginx
(lub
Apache
http://en.wikipedia.org/wiki/Apache_HTTP_Server
/
Lighttd
http://en.wikipedia.org/wiki/Lighttpd). serwer sieciowy może wydajnie obsługiwać statyczną zawartość, logować się, przepisywać adresy URL, kończyć działanie
SSL
http://en.wikipedia.org/wiki/SSL, stosuj zasady dostępu i zarządzaj wieloma usługami wsparcia. W przypadku żądań, które trafiają do rzeczywistej usługi hosta, serwer WWW przekazuje żądanie za pośrednictwem. 2) przy użyciu struktury, takiej jak
Unicorn
http://unicorn.bogomips.org/, która będzie zarządzać przepływami pracy, okresowo je przetwarzać itp. Nadal nie znalazłem frameworka służącego Node.js, który wydaje się kompletnie wypalony; może istnieć, ale jeszcze go nie znalazłem i nadal używam ~ 150 linii w moim ręcznie zwijanym pliku „production.js”.
Ramy czytania, takie jak
Express
http://expressjs.com/, pozwala pomyśleć, że standardową praktyką jest po prostu obsługiwanie wszystkiego za pośrednictwem jednej usługi Node.js typu jack-of-all-trade ... "app.use (express.static (__ katalog + '/ public'))". W przypadku usług o mniejszym obciążeniu i rozwoju prawdopodobnie jest to w porządku. Ale kiedy spróbujesz włożyć dużo czasu do swojej usługi i uruchomić ją 24 godziny na dobę, 7 dni w tygodniu, szybko odkryjesz motywacje, które popychają duże witryny do posiadania dobrze wypalonego, doprawionego kodu C, takiego jak Nginx, który transmituje swoją witrynę i obsługuje wszystkie statyczne żądania zawartości (... do czasu skonfigurowania
CDN
http://en.wikipedia.org/wiki/C ... twork, tak jak
Amazon CloudFront
http://en.wikipedia.org/wiki/Amazon_CloudFront)). Aby uzyskać nieco zabawne i bezwstydnie negatywne spojrzenie na to, spójrz na
ten facet
http://teddziuba.com/2011/10/n ... .html
.
Node.js znajduje również coraz więcej zastosowań niezwiązanych z usługami. Nawet jeśli używasz czegoś innego do obsługi treści WWW, nadal możesz używać Node.js jako narzędzia do budowania, używając modułów npm do organizowania kodu.
Browserify
https://github.com/substack/node-browserify
połączyć je w jeden zasób i
brzydki-js
https://github.com/mishoo/UglifyJS
zminimalizować jego rozmieszczenie. Do pracy w sieci JavaScript jest idealny
dopasowanie impedancji
http://en.wikipedia.org/wiki/O ... match
a to często sprawia, że jest to najłatwiejsza ścieżka ataku. Na przykład, jeśli chcesz czołgać się przez stertę
przydatny
http://en.wikipedia.org/wiki/JSON
mnóstwo odpowiedzi JSON, powinieneś użyć mojego modułu
podkreślenia-
https://github.com/ddopson/underscore-cli
CLI, Structured Data Service Belt.
Za I przeciw:
>
W porównaniu z prostym jednym procesem na żądanie (
LAMP
http://en.wikipedia.org/wiki/L ... %2529
):
>
Przeciwko pisaniu „prawdziwej” usługi w Javie/C #/C (C? Naprawdę?)
>
Aby zobaczyć inne spojrzenie na JavaScript i Node.js, sprawdź
Java na Node.js.
http://n0tw0rthy.wordpress.com ... e-js/, post na blogu o wrażeniach i doświadczeniach programisty Java uczącego się Node.js.
Moduły
rozważając węzeł, należy pamiętać, że wybór bibliotek JavaScript będzie
DEFINE
Twoje doświadczenie. Większość ludzi używa co najmniej dwóch, asynchronicznego pomocnika wzorców (Step, Futures, Async) i modułu cukru JavaScript (
Underscore.js
http://en.wikipedia.org/wiki/Underscore.js
).
Pomocnik/JavaScript Sugar:
Asynchroniczne moduły szablonów:
Lub przeczytaj wszystko o bibliotekach asynchronicznych, zobacz
ten panel wywiadów
http://www.infoq.com/articles/ ... cript
z autorami.
framework sieciowy:
Testowanie:
[/*]
[/list]
Sprawdź też
oficjalna lista
http://nodejs.org/docs/v0.4.11/api/appendix_1.html
zalecane moduły Node.js. ale
Węzeł Wiki modułów GitHub
http://en.wikipedia.org/wiki/GitHub
jest znacznie bardziej kompletnym i lepszym źródłem informacji.
Aby zrozumieć Node, warto rozważyć kilka kluczowych wyborów projektowych.
:
Node.js
oparta na wydarzeniach
i
ASYNCHRONOUS
/
ODBLOKOWANY
... Zdarzenia, takie jak przychodzące połączenie HTTP, wyzwalają funkcję JavaScript, która niewiele działa i wyzwala inne zadania asynchroniczne, takie jak łączenie się z bazą danych lub pobieranie zawartości z innego serwera. Po uruchomieniu tych zadań funkcja zdarzenia kończy się i Node.js ponownie przechodzi w stan hibernacji. Gdy tylko wydarzy się coś innego, na przykład zostanie nawiązane połączenie z bazą danych lub serwer zewnętrzny odpowie treścią, uruchamiane są funkcje zwrotne i wykonywanych jest więcej kodu JavaScript, co może wywołać jeszcze bardziej asynchroniczne zadania (takie jak zapytanie do bazy danych). W ten sposób Node.js będzie szczęśliwie przeplatał działania w wielu równoległych przepływach pracy, wykonując wszystkie czynności, które są odblokowane w danym momencie. Właśnie dlatego Node.js tak dobrze radzi sobie z zarządzaniem tysiącami jednoczesnych połączeń.
Dlaczego nie użyć jednego procesu/wątku dla każdego połączenia, jak wszyscy inni?
W Node.js nowe połączenie jest po prostu bardzo małą alokacją sterty. Rozpoczęcie nowego procesu zajmuje znacznie więcej pamięci, megabajtów na niektórych platformach. Ale prawdziwy koszt to narzut związany z przełączaniem kontekstu. Kiedy masz 10 ^ 6 wątków jądra, jądro musi wykonać dużo pracy, zastanawiając się, kto powinien teraz uruchomić. Wiele pracy włożono w stworzenie harmonogramu O (1) dla Linuksa, ale ostatecznie po prostu znacznie bardziej wydajne jest posiadanie jednego procesu sterowanego zdarzeniami niż 10 ^ 6 procesów konkurujących na czas procesora. Ponadto w warunkach przeciążenia model wieloprocesorowy zachowuje się bardzo słabo, pozbawiając krytyczne usługi administracyjne i zarządzania, zwłaszcza SSHD (co oznacza, że nie możesz nawet wejść do pudełka, aby dowiedzieć się, jak naprawdę jest pokręcony).
Node.js
jednowątkowy
i bez
zamek
... Node.js jako bardzo przemyślany wybór projektowy ma tylko jeden wątek na proces. Z tego powodu jednoczesny dostęp do danych wielu wątków jest zasadniczo niemożliwy. W ten sposób nie są potrzebne żadne zamki. Nici są bardzo sztywne. Bardzo, bardzo ciężko. Jeśli w to nie wierzysz, oznacza to, że nie zrobiłeś wystarczająco dużo programowania wątków. Uzyskanie właściwej blokady jest trudne i prowadzi do błędów, które są naprawdę trudne do wyśledzenia. Eliminacja blokad i wielowątkowości sprawia, że jedna z najbardziej obrzydliwych klas błędów po prostu znika. To może być największa zaleta node.
Ale jak mogę używać mojego 16-rdzeniowego pudełka?
Dwie drogi:
Node.js pozwala robić naprawdę potężne rzeczy bez nadmiernego wysiłku.
Załóżmy, że masz program Node.js, który wykonuje różne zadania i nasłuchuje poleceń
przez
http://en.wikipedia.org/wiki/T ... tocol
Port TCP, koduje niektóre obrazy itp. Za pomocą pięciu wierszy kodu można dodać do portalu zarządzania WWW opartego na protokole HTTP, który pokazuje aktualny stan aktywnych zadań. Jest to ŁATWE do zrobienia:
Teraz możesz kliknąć przycisk URL i sprawdzić stan uruchomionego procesu. Dodaj kilka przycisków, a otrzymasz „portal zarządzania”. Jeśli masz działający skrypt Perl/Python/Ruby, po prostu „wrzucenie do portalu zarządzania” nie jest całkowicie proste.
Ale czy JavaScript nie jest wolny/zły/zły/spawn-of-the-devil?
JavaScript ma kilka dziwnych cech, ale z „dobrymi stronami” istnieje bardzo potężny język, a zresztą JavaScript jest tym językiem na kliencie (przeglądarce). JavaScript jest na zawsze; inne języki celują w to jako IL, a światowej klasy talenty rywalizują o produkcję najbardziej zaawansowanych silników JavaScript. Ze względu na rolę JavaScript w przeglądarce, bardzo dużo wysiłku inżynierów włożono w bardzo szybkie tworzenie JavaScript.
V8
http://en.wikipedia.org/wiki/V ... %2529
to najnowszy i najlepszy silnik javascript przynajmniej w tym miesiącu. To zdmuchuje inne języki skryptowe zarówno pod względem wydajności, jak i stabilności (patrząc na ciebie Ruby). A to będzie tylko lepsze, gdy ogromne zespoły pracujące nad tym problemem w Microsoft, Google i Mozilla będą konkurować o stworzenie lepszego silnika JavaScript (nie jest to już „interpreter” JavaScript, ponieważ wszystkie nowoczesne silniki wykonują mnóstwo kompilacji JIT pod maską z tłumaczeniem tylko jako rozwiązanie zastępcze dla kodu jednorazowego wykonania). Tak, wszyscy chcielibyśmy naprawić niektóre z dziwniejszych odmian języka JavaScript, ale naprawdę nie jest tak źle. A język jest tak cholernie elastyczny, że tak naprawdę nie kodujesz JavaScript, kodujesz Step lub jQuery - bardziej niż jakikolwiek inny język, biblioteki JavaScript definiują doświadczenie. Aby tworzyć aplikacje internetowe, i tak musisz znać JavaScript, więc kodowanie za jego pomocą na serwerze ma swego rodzaju synergię umiejętności. To sprawiło, że nie bałam się pisać kodu klienta.
Ponadto, jeśli NAPRAWDĘ nienawidzisz JavaScript, możesz użyć cukru syntaktycznego, takiego jak
CoffeeScript
http://jashkenas.github.com/coffee-script/... Lub cokolwiek innego, co generuje kod JavaScript, na przykład
Google Web Toolkit
http://code.google.com/webtoolkit/
(GWT).
A propos JavaScript, czym jest „zamknięcie”?
- Całkiem fantazyjny sposób powiedzenia, że przechowujesz zmienne o zasięgu leksykalnym w łańcuchach wywołań. ;) Lubię to:
Widzisz, jak możesz po prostu użyć „myData” bez robienia czegoś niezręcznego, na przykład ukrywania go w obiekcie? W przeciwieństwie do Javy zmienna „myData” nie powinna być tylko do odczytu. Ta zaawansowana funkcja języka sprawia, że programowanie asynchroniczne jest znacznie mniej rozwlekłe i mniej bolesne.
Pisanie kodu asynchronicznego zawsze będzie trudniejsze niż pisanie prostego skryptu jednowątkowego, ale w przypadku Node.js nie jest to takie trudne, a oprócz wydajności i skalowalności dla tysięcy równoczesnych połączeń zyskujesz wiele korzyści ...
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
http://en.wikipedia.org/wiki/V ... %2529
jest implementacją funkcji JavaScript. Umożliwia uruchamianie (między innymi) samodzielnych aplikacji JavaScript.
Node.js to po prostu biblioteka napisana dla V8, która obsługuje zdarzenia we/wy. ta koncepcja jest trochę trudniejsza do wyjaśnienia i jestem pewien, że ktoś odpowie lepszym wyjaśnieniem niż ja ... Najważniejsze jest to, że zamiast robić jakieś dane wejściowe lub wyjściowe i czekać, aż to się stanie, po prostu
nie
czekając, aż to się skończy. Na przykład zapytaj o czas ostatniej edycji pliku:
Może to zająć kilka milisekund, a nawet kilka sekund. Z wydarzeniem
I/O
http://en.wikipedia.org/wiki/Input/output
po prostu uruchamiasz żądanie i zamiast czekać w pobliżu, dołącz wywołanie zwrotne, które uruchamia się po zakończeniu żądania:
To sprawia, że jest bardzo podobny do kodu JavaScript w przeglądarce (na przykład pod względem funkcjonalności stylu
Ajax
http://en.wikipedia.org/wiki/A ... %2529
).
Więcej informacji znajdziesz w artykule
Node.js naprawdę uzależnia
http://simonwillison.net/2009/Nov/23/node/
co było moim wprowadzeniem do biblioteki/platformy ... wydało mi się całkiem niezłe.
Anonimowy użytkownik
Potwierdzenie od:
http://nodejs.org/
to narzędzie wiersza poleceń typu open source stworzone dla kodu JavaScript po stronie serwera. Możesz pobrać
tarball
http://en.wikipedia.org/wiki/Tarball, skompiluj i zainstaluj kod źródłowy. Pozwala na uruchamianie programów JavaScript.
Wykonywany jest JavaScript
V8
http://code.google.com/p/v8/, silnik JavaScript opracowany przez Google, który jest używany w przeglądarce
Chrome
http://en.wikipedia.org/wiki/Google_Chrome... Używa JavaScript API, aby uzyskać dostęp do sieci i systemu plików.
Jest popularny ze względu na swoją wydajność i możliwość wykonywania operacji równoległych.
Zrozumienie node.js
http://debuggable.com/posts/un ... d56cb
to najlepsze wyjaśnienie działania node.js,
który
http://nodejs.org/
Do tej pory znalazłem.
Poniżej znajduje się kilka dobrych artykułów na ten temat.
Anonimowy użytkownik
Potwierdzenie od:
W przypadku współbieżności oznacza to, że można zdefiniować zmienne, a następnie wywołać funkcję nieblokującą
Wejście
http://en.wikipedia.org/wiki/Input/output
-output i wyślij mu anonimową funkcję do wywołania zwrotnego.
Po zakończeniu zadania funkcja zwrotna zostanie wykonana w kontekście zmiennych, którymi jest zamknięcie.
Powodem, dla którego domknięcia są tak świetne do pisania nieblokujących aplikacji we/wy, jest to, że bardzo łatwo jest zarządzać kontekstem funkcji, które działają asynchronicznie.
Anonimowy użytkownik
Potwierdzenie od:
Gorąco polecam zajrzeć i przeczytać te artykuły:
Wybierz dowolny język i spróbuj zapamiętać, jak zarządzać szablonami plików HTML i co musisz zrobić, aby zaktualizować jedną nazwę klasy
CSS
http://en.wikipedia.org/wiki/C ... heets
w twojej strukturze
DOM
http://en.wikipedia.org/wiki/Document_Object_Model
(na przykład użytkownik kliknął element menu i chcesz, aby został oznaczony jako „wybrany” i odświeżył zawartość strony).
Dzięki Node.js jest to tak proste, jak zrobienie tego w JavaScript po stronie klienta. Pobierz węzeł DOM i zastosuj do niego klasę CSS. Pobierz swój węzeł DOM i innerHTML zawartość (potrzebujesz do tego dodatkowego JavaScript. Przeczytaj artykuł, aby dowiedzieć się więcej).
Innym dobrym przykładem jest to, że możesz uczynić swoją stronę internetową zgodną, włączoną lub wyłączoną za pomocą tego samego fragmentu kodu. Wyobraź sobie, że masz selektor dat wykonany w JavaScript, który pozwoli Twoim użytkownikom wybrać dowolną datę za pomocą kalendarza. Możesz napisać (lub użyć) ten sam fragment kodu JavaScript, aby działał z JavaScript, włączonym lub wyłączonym.
Anonimowy użytkownik
Potwierdzenie od:
Node.js, gabinety lekarskie i restauracje szybkiej obsługi - zrozumienie programowania wydarzeń
http://code.danyork.com/2011/0 ... ming/
Oto krótkie podsumowanie:
Jeśli restauracja typu fast food postępuje zgodnie z tradycyjnym modelem opartym na wątkach, zamawiasz jedzenie i czekasz w kolejce, aż je otrzymasz. Osoba stojąca za Tobą nie będzie mogła złożyć zamówienia, dopóki zamówienie nie zostanie zakończone. W modelu opartym na wydarzeniach zamawiasz jedzenie, a następnie opuszczasz kolejkę, aby czekać. Każdy inny może wtedy złożyć zamówienie.
Node.js jest sterowany zdarzeniami, ale większość serwerów WWW jest opartych na wątkach. York wyjaśnia, jak działa Node.js:
Anonimowy użytkownik
Potwierdzenie od:
rozumiem
http://nodejs.org/#about
- Celem Node jest zapewnienie łatwego sposobu do budowy skalowalnych programów sieciowych.
- Węzeł jest podobny pod względem projektu i efektu do systemów takich jak maszyna zdarzeń Ruby lub skręcony Python.
- Evented I/O dla javascript V8.
Dla mnie oznacza to, że miałeś rację we wszystkich trzech założeniach. Biblioteka zdecydowanie wygląda obiecująco!Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
wejście wyjście
http://en.wikipedia.org/wiki/Input/output
.
Dobrze. Używa wywołań zwrotnych, więc każde żądanie dostępu do systemu plików spowoduje wysłanie żądania do systemu plików, a następnie Node.js rozpocznie przetwarzanie następnego żądania. Będzie się martwić o żądanie I/O, gdy tylko otrzyma odpowiedź z systemu plików, w którym to czasie wykona kod wywołania zwrotnego. Można jednak wysyłać synchroniczne żądania we/wy (to znaczy żądania blokujące). Deweloper musi wybrać pomiędzy asynchronicznym (callback) lub synchronicznym (oczekującym).
P: Używa JavaScript, a parser to V8.
tak
P: Można go łatwo wykorzystać do tworzenia równoległych aplikacji serwerowych.
Tak, chociaż będziesz musiał ręcznie kodować całkiem sporo JavaScript. Lepiej byłoby spojrzeć na framework, taki jak
http://www.easynodejs.com/
http://www.easynodejs.com/
- który zawiera pełną dokumentację online i przykładową aplikację.