Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Prosty serwer HTTP w Node.js


Gość petergood

Rekomendowane odpowiedzi

Opublikowano

Prosty serwer HTTP w Node.js

 

Podczas pisania poradnika przyjmuję, że czytelnik zna JavaScript, oraz korzysta z Linuxa (lub zna równoznaczne komendy dla CMD w Windowsie).

 

 

Witam.

Po przeczytaniu tego poradnika, będziesz wiedział:

  • Jak zainstalować Node.js na Windowsie i Linuxie
  • To to takiego jest Node.js
  • Jak napisać prosty serwer HTTP w Node.js

Na wstępie chciałbym wyjaśnić wam, co to jest Node.js. Otóż, Node.js (powszechnie znany jako Node) jest środowiskiem programistycznym zaprojektowanym do tworzenia aplikacji internetowych w JavaScript. Node bazuje na Chrome JavaScript Runtime (czasami nazywany silnikiem V8). Cytując stronę domową Node.js korzysta z asynchronicznego systemu wejścia-wyjścia (non-blocking). Właśnie to jest największą (i najczęściej rozważaną) różnicą pomiędzy Node.js i PHP. Warto wspomnieć, że interpretator PHP działa na serwerze Apache, a Node.js (moduł HTTP) - jest serwerem HTTP który "przesyła" stronę do użytkownika. Może również ingerować w wygląd strony (np. za pomocą modułu Cheerio).


Instalacja Node.js na Windowsie
Instalacja Node.js na Windowsie jest bardzo prosta. Wystarczy, że ze pobierzemy i zainstalujemy ten program: Node.js.

Po zainstalowaniu sprawdzamy poprawność instalacji:

node -v

Instalacja Node.js na Linuxie
Instalacja Node.js na Linuxie (mój przypadek) zajmuje trochę więcej czasu, ale efekt końcowy jest ten sam. Istnieje kilka sposobów na zainstalowanie Node.js na linuxie, lecz ja wybiorę instalację poprzez NVM (Node Version Manager).
Na początek musimy pobrać kilka pakietów:


sudo apt-get update
sudo apt-get install build-essential libssl-dev
sudo apt-get install curl

Następnie pobieramy z repozytorium NVM, oraz go instalujemy:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

Następnym krokiem będzie sprawdzenie, jakie wersje Node.js są dostępne:

nvm ls-remote

Powinno się pokazać coś takiego:

    ...
    v0.10.10
    v0.10.11
    v0.10.12
    v0.10.13
    v0.10.14
    v0.10.15
    v0.10.16
    v0.10.17
    v0.10.18
    v0.10.19
    v0.10.20
    v0.10.21
    v0.10.22
    v0.10.23
    v0.10.24
    v0.10.25
    v0.10.26
    v0.10.27
    v0.10.28
    v0.10.29
    v0.10.30
    v0.10.31
    v0.10.32
    v0.10.33
    ...

Instalujemy wersję v0.10.30:

nvm install 0.10.30

Następnie, musimy przekazać NVM, że chcemy używać wersję Node.js v0.10.30 (Pamiętaj, że po ponownym uruchomieniu terminala, będziesz musiał powtórzyć tę czynność!):

nvm use 0.10.30

Weryfikujemy poprawność instalacji:

node -v

Tworzymy prosty serwer HTTP w Node.js
Teraz nadchodzi najciekawsza część, czyli napisanie serwera HTTP w Node. Na początek odpowiedzmy sobie na pytanie, co to jest serwer HTTP. Otóż, serwer HTTP (inaczej nazywany serwerem WWW) jest to program, który odpowiada na żądania HTTP (np. wysyłając do klienta plik HTML). Może być on wzbogacony innym oprogramowaniem, np PHP, który umożliwia tworzenie dynamicznych stron internetowych.

Zapamiętaj:

  • Interpretator PHP nie jest serwerem HTTP. Interpretator PHP jest jedynie częścią oprogramowania, który leży pomiędzy serwerem HTTP (w przypadku PHP jest to Apache) a klientem.
  • Moduł HTTP w Node.js jest serwerem HTTP. Node.js nie korzysta z Apache!
  • NODE.JS NIE WSPÓŁDZIAŁA Z INTERPRETATOREM PHP!

Jak wspominałem na początku, podczas tego poradnika będę korzystał z Linuxa. Na początek, stworzę nowy katalog, w którym wszystko będzie się działo:

mkdir node_tutorial
cd node_tutorial

Następnie, rozpocznę edycję pliku simple_http_server.js

vim simple_http_server.js

Zapewnie już zauważyłeś, że w poradniku pojawiało się słowo moduł. Otóż, Node.js kożysta z modułów. Często przyrównuję je do bibliotek. Można je pobierać za pomocą NPM (Node Package Manager). Jest to coś takiego jak Composer dla PHP. Lecz w tym poradniku nie będziemy musieli niczego pobierać.

Na początek do zmiennej http ładujemy moduł HTTP:

var http = require("http");

Następnie, wywołujemy funkcję, która utworzy prosty serwer HTTP:

    http.createServer(function (request, response) {
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.end('Hello World\n');
    }).listen(3000, '127.0.0.1');

Działanie jest bardzo proste. Wywołujemy funkcję createServer(), a jako parametr podajemy funkcję, która będzie callback`iem. Funkcja ta będzie wywołana za każdym razem, gdy ktoś odwiedzi naszą stronę. Funkcja ta przyjmuje dwie zmienne:

  • request - żądanie HTTP
  • response - odpowiedź HTTP

za pomocą funkcji writeHead() wysyłamy nagłówek o statusie 200 (czyli wszystko działa), oraz "Content-Type": "text/plain", czyli zwykły tekst. Za pomocą funkcji listen() nasz serwer HTTP będzie oczekiwał na żądania HTTP na IP 127.0.0.1 (localhost), oraz na porcie 3000.

Pamiętaj: Aby używać portów < 100, musisz posiadać uprawnienia administratora (root)

Po zapisaniu naszego pliku, nadszedł czas, aby odpalić nasz serwer HTTP.

node simple_http_server.js

Następnie odwiedzamy w przeglądarce adres 127.0.0.1:3000, i powinniśmy zobaczyć napis: Hello World!. Gratulacje!
Widzisz teraz, jak banalnie jest utworzyć serwer HTTP w Node.js. Zrobiliśmy to, w mniej niż 10 linijek kodu!

var http = require("http");

http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Hello World\n');
}).listen(3000, '127.0.0.1');

Dlaczego powinienem używać Node.js?

Jest to dosyć sporny temat, można by wiele mówić. Ale najważniejszym faktem jest szybkość Node.js. Te artykuły mogą się przydać:

 

 

Jeżeli masz jakiekolwiek pytania, zapraszam do pozostawiania pytań w tym temacie, lub kontakt na PW.

Pozdrawiam.

Opublikowano

Twoja odpowiedź dlaczego powinno się go używać jest raczej kiepska. Dla uściślenia jest to jednowątkowe programowanie asynchroniczne, owszem jest szybkie, ale niestety trzeba przestawić się z myślenia programowania synchronicznego, które jest używane we wszystkich popularnych językach. Dodatkowym plusem node.js są genialne framework'i realtime. Do amatorskich projektów jest to przerost treści nad forma. :)

Opublikowano

Twoja odpowiedź dlaczego powinno się go używać jest raczej kiepska. Dla uściślenia jest to jednowątkowe programowanie asynchroniczne, owszem jest szybkie, ale niestety trzeba przestawić się z myślenia programowania synchronicznego, które jest używane we wszystkich popularnych językach. Dodatkowym plusem node.js są genialne framework'i realtime. Do amatorskich projektów jest to przerost treści nad forma. :)

 

Dokładnie, np. skrypty w PHP są wykonywane synchronicznie (tkz. blocking), więc całkowity czas wykonywania się skryptu jest dłuższy. Oczywiście zależy to od wykonywanej czynności.

 

Moim zdaniem Node.js nie jest tak popularnym wyborem w amatorskich projektach, dlatego że zwykle wiąże się z większymi kosztami (serwery dedykowane itp.)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...