2015-04-25 17 views
21

Mam problem ze zrozumieniem różnicy między net.createserver i http.createserver w node.js.http.createserver vs net.createserver in node.js

Czytałem dokumentację dla obu metod znajdujących się w tych dwóch adresów URL https://nodejs.org/api/net.html#/net_net, https://nodejs.org/api/http.html#/http_class_http_server.

Rozumiem, że http.createserver tworzy serwer http. Jednak dokumentacja mówi, że net.createserver tworzy serwer tcp. Rozumiem, że tcp to protokół transmisji, nad którym znajduje się http, i że serwery http są skonfigurowane tak, aby odczytywały nagłówki żądań http. Równie dobrze rozumiem koncepcję równomiernych emiterów w węźle node.js. Jednak nie rozumiem tego pojęcia serwera tcp i dlaczego zostałby on wykonany w node.js. W kontekście koduję przykład aplikacji czatu w książce "node.js w akcji".

Odpowiedz

25

http.createServer() konfiguruje serwer obsługujący protokół HTTP, który jest rzeczywiście przesyłany przez tcp. net.createServer() tworzy serwer, który po prostu rozumie, kiedy nastąpiło połączenie TCP, dane zostały przesłane itd., Ale nie wie nic o otrzymaniu prawidłowego żądania HTTP itp.

Jeśli piszesz serwer WWW, faworyzujący http.createServer() ponad net.createServer(), ponieważ pozwoli Ci to zaoszczędzić sporo pracy. Jeśli piszesz jakiś inny rodzaj serwera, nie używaj http.createServer().

+0

Dzięki, miałem wrażenie, że net.createserver() był bardziej ogólnym konstruktorem, jednak nie byłem tego pewien. –

+0

Ładna odpowiedź, dzięki. –

10

Nie znam zbyt wiele Node.js, ale wiem coś o sieciach. HTTP jest protokołem, który działa na 7. (aplikacji) warstwie modelu OSI. TCP to protokół działający na czwartej (Transportowej) warstwie modelu OSI. Jak już powiedziałeś, tak HTTP działa na szczycie TCP. Opcja tworzenia serwera HTTP przez http.createServer() jest dostępna, więc nie musisz jej implementować samodzielnie, używając net.createServer(). Protokół TCP może być używany przez wiele aplikacji, możesz utworzyć własny lub wdrożyć inny protokół niż HTTP, na przykład: FTP, DNS, SMTP, Telnet i wiele innych.