2016-02-26 39 views
5

Wkrótce będę używał serwera o nazwie Undertow. website mówi:Jeśli serwer WWW nie jest blokujący, oznacza to, że obsługuje IO tak samo jak plik node.js?

Undertow jest elastyczny serwer wydajnych internetowej napisany w języku Java, zapewniając zarówno blokowania i non-blocking API oparty na NIO

Jeśli Undertow pozwala non-blocking, jest to, że sama jako plik node.js? Nie mam na myśli języków ani niczego w tym stylu. Mam osobny projekt, w którym pomyślałem, że node.js byłby dobrym wyborem, ale jeśli mogę użyć jednego produktu dla wielu projektów, byłoby to pomocne.

EDYCJA: Znalazłem to pytanie. Java NIO non-blocking mode vs node.js asychronous operation I zaczynam myśleć, że mam pomieszane rzeczy.

+0

Prawdopodobny duplikat trybu Java NIO non-blocking versus node.js asychronous operation (http://stackoverflow.com/questions/20740961/java-nio-non-blocking-mode-vs-node-js-asychronous -operacyjny) – EJP

Odpowiedz

1

Undertow bazuje na bibliotece JBoss XNIO i jak Nodejs, XNIO opiera się na możliwości systemu operacyjnego (epoll lub KQUEUE jeśli jest dostępny), aby być powiadamiany o wydarzeniach IO (gdy dane są dostępne do odczytu z gniazda dla przykład).

W Undertow przyjmowanie przychodzących zgłoszeń odbywa się zgodnie z tym modelem, przez IO threads. Wykonanie operacji blokowania tych wątków oznaczałoby opóźnienie obsługi nowych żądań przychodzących. See Undertow's documentation on IO threads

Obok wątków IO, Undertow zarządza inny basen gwintem, Worker threads, aby obsłużyć zadania blokujące (myślę zadań jak wywołaniem webservices lub zapytań do bazy danych). I to jest to, czego nie dostaniesz z Nodejs!

Aby użyć wątku roboczego, obsługa żądania musi być wysłana z wątku IO. Interfejs API jest kompleksowy i łatwy w użyciu, ponownie, see Undertow's documentation, jako punkt wyjścia.

+0

Czy masz na myśli używanie Undertow niż Node.js Czy mogę przetworzyć o wiele więcej żądań? A co z wykorzystaniem pamięci? –

+0

Nie to nie jest to, o czym mówię. Odpowiedź na to pytanie jest prawie niemożliwa, nawet nie ma to sensu. Wszystko zależy od tego, co robisz w tych wnioskach.Mówię tylko, że w Undertow można używać zwykłych wątków java - wątków roboczych (mapują do wątków jądra), aby wykonywać zadania blokujące (wywołania DB, obsługa plików ...), a tego nie można zrobić w Nodejs. W przypadku Nodejs nie masz tak naprawdę problemu z blokowaniem zadań (jeśli wiesz, co robisz), ponieważ większość używanych bibliotek oczekuje, że wywołanie zwrotne zostanie wywołane po zakończeniu zadania. – aramaki

0

Od Wikipedia:

W informatyce, asynchroniczne I/O lub non-blocking I/O jest formą przetwarzania wejścia/wyjścia, który pozwala, aby kontynuować przetwarzanie innych przed transmisja została zakończona.

Nieblokujące i asynchroniczne są synonimami, i tak działają wszystkie standardowe serwery WWW node.js.

+0

Czy uważasz, że to tylko wybór między środowiskami? – johnny

+0

Wcale nie. Oznacza to po prostu, że różne serwery internetowe używają tej samej technologii do obsługi IO. Nadal istnieje wiele różnic w funkcjonalności i wydajności. Nie mam wystarczającego doświadczenia z różnymi serwerami, aby móc polecić którąkolwiek z opcji tutaj. – bolav

+0

Wikipedia znowu nie tak. Asynchroniczne i nieblokujące to dwa różne modele, nie będące synonimami. W trybie bez blokowania przesyłanie jest zakończone lub nie nastąpiło, gdy zostanie zwrócone wywołanie we/wy. – EJP