Bisakah kita mengatakan node.js adalah server web?

92

Saya menemukan bahwa saya bingung antara web framework dan web server.

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

Bisakah kita mengatakan node.js adalah server web ??? Saya jadi bingung antara web server / framework.

Jika entah bagaimana node.js adalah jenis server web, bukan webframework (Express melakukannya), mengapa kita perlu meletakkan seluruh node.js di atas server Nginx dalam praktik yang berguna ?? Pertanyaan tentang SO

Siapa yang bisa membantu ???

Kit

Kit Ho
sumber
4
Tornado adalah server web + kerangka kerja web kecil. :) Saya pikir ezpresso benar. Node.js sebenarnya adalah lingkungan runtime seperti JRE Java. Node.js semakin sering digunakan untuk aplikasi non-web. Program yang Anda tulis dengan Node.js tidak memiliki kemampuan server web kecuali Anda menambahkannya. Memang, Node.js memiliki fungsi asli tingkat sangat tinggi yang memungkinkan Anda dengan mudah membuat server web dengan http.CreateServer (...). Mendengarkan (80); tetapi tidak ada server web yang ada di program Anda kecuali Anda menambahkan ini. Jadi Node.js sendiri bukanlah web server. Sebaliknya, Anda menggunakan Node.js untuk membuatnya.
OCDev
1
Sebenarnya, Anda tidak perlu menempatkan server web di atas Node.js - Anda dapat menulis server kecil di dalam proyek Node Anda dan yang menangani semua permintaan browser rutin serta yang khusus untuk aplikasi web terkait. Tetapi hal-hal seperti perubahan halaman web ditangani lebih baik oleh server web, misalnya Nginx. Jadi, meskipun Anda tidak harus melibatkan server web dengan Node, sering kali lebih bijaksana untuk melakukannya.
Batang
Apakah C ++ webserver? Tidak, itu adalah bahasa pemrograman yang dapat Anda gunakan untuk menulisnya. Sama dengan node.js.
alfadog67

Jawaban:

53

Server web

Server web dapat merujuk ke perangkat keras (komputer) atau perangkat lunak (aplikasi komputer) yang membantu menyampaikan konten yang dapat diakses melalui Internet. 1

Fungsi utama server web adalah mengirimkan halaman web atas permintaan klien. Ini berarti pengiriman dokumen HTML dan konten tambahan apa pun yang mungkin disertakan oleh dokumen, seperti gambar, style sheet, dan skrip.

Server web adalah dasar untuk mengirimkan permintaan / halaman ke klien / pengguna di internet

Kerangka web

Kerangka aplikasi web adalah kerangka kerja perangkat lunak yang dirancang untuk mendukung pengembangan situs web dinamis, aplikasi web, dan layanan web. Kerangka kerja ini bertujuan untuk mengurangi biaya overhead yang terkait dengan aktivitas umum yang dilakukan dalam pengembangan Web. Misalnya, banyak kerangka kerja menyediakan perpustakaan untuk akses database, kerangka kerangka kerja dan manajemen sesi, dan mereka sering mempromosikan penggunaan ulang kode.

Kerangka web menggunakan server web untuk mengirimkan permintaan ke klien, tetapi itu bukan server web.

Node.js

Node.js adalah platform yang dibangun di atas runtime JavaScript Chrome untuk membuat aplikasi jaringan yang cepat dan skalabel dengan mudah. Node.js menggunakan model I / O yang digerakkan oleh peristiwa dan non-pemblokiran yang membuatnya ringan dan efisien, cocok untuk aplikasi real-time intensif data yang berjalan di perangkat terdistribusi.

Tetapi sekali lagi Anda juga dapat membuat aplikasi CLI jadi saya pikir Anda harus melihatnya lebih sebagai platform untuk menulis program javascript untuk dijalankan di server Anda (komputer) menggunakan bahasa pemrograman Javascript daripada hanya di browser seperti pada awalnya. Saya pikir Anda bisa melihatnya sebagai ??Javascript++

Anda juga dapat menulis server web dengan node.js seperti yang Anda lihat di halaman depan node.js. Awalnya Ryan mengatakan Anda bisa meletakkan Nginx di depan node.js karena stabilitas proyek. Proyek ini masih sangat muda. Nginx adalah server web terbukti yang akan terus berjalan sementara node.js bisa macet. Kemudian banyak pengguna hanya menggunakan node.js untuk itu.

Alfred
sumber
6
Node.js adalah runtime JavaScript yang dibangun di atas mesin JavaScript V8 Google ...
ozanmuyes
1
Bagaimana server web (apache atau nginx) menjadi perangkat keras?
shadow0359
Saya pikir pertanyaan utamanya adalah apakah Node.js mendengarkan port HTTP secara default? Jika demikian, itu mengklasifikasikannya sebagai server HTTP juga.
forsberg
1
Kita dapat mengatakan bahwa persegi adalah persegi panjang tetapi bukan sebaliknya. apakah Anda mengatakan bahwa Nodejs lebih dari sekedar server web? atau tidak sama sekali mewakili server web?
CME64
1
@ shadow0359 Agak terlambat, tetapi bagi siapa pun yang membaca ini, server web bukan hanya perangkat lunaknya. Ini juga bisa berarti perangkat keras fisik, komputer tempat perangkat lunak tersebut berjalan
Christoffer
25

Saya akan mengatakan Node.js adalah Runtime Environment atau Runtime Engine.

Mungkin definisi terbaik yang saya temukan sejauh ini berasal dari artikel oleh Rob Gravelle berjudul "An Intro to Node.js" :

Node.js adalah lingkungan runtime bagian dan pustaka bagian untuk membangun aplikasi jaringan menggunakan JavaScript sisi server. Ini menggunakan mesin runtime JavaScript Chrome untuk mengeksekusi kode JS secara langsung tanpa memerlukan kotak pasir browser.

Juga Ensiklopedia PCMAG.COM memberikan definisi berikut dari "mesin runtime":

Perangkat lunak yang bergantung pada aplikasi tertentu untuk dijalankan di komputer. Mesin runtime harus dijalankan di komputer agar aplikasi dapat dijalankan. Ini menyediakan rutinitas dan fungsi umum yang diperlukan aplikasi, dan biasanya mengubah program, yang dalam bahasa perantara, sementara, menjadi bahasa mesin.

Juga artikel Wikipedia berjudul "Run-time system" menyatakan:

Sistem waktu proses (juga disebut sistem waktu proses, lingkungan waktu proses, atau hanya waktu proses) mengimplementasikan perilaku dasar bahasa komputer, apakah bahasa tersebut adalah bahasa yang dikompilasi, bahasa yang ditafsirkan, bahasa khusus domain yang disematkan, atau dipanggil melalui API seperti pthreads.

... Sistem run-time dapat mengimplementasikan perilaku tugas seperti menggambar teks di layar atau membuat koneksi Internet. Ini juga biasanya bertindak sebagai lapisan abstraksi yang menyembunyikan kompleksitas atau variasi dalam layanan yang ditawarkan oleh sistem operasi.

Nah, apakah ada lingkungan runtime (atau bahkan platform perangkat lunak) seperti Node.js di luar sana? Saya kira JRE adalah contoh yang baik dari lingkungan seperti itu. Node.js dan JRE - mereka memiliki banyak kesamaan. Mereka semua memiliki (semacam) mesin virtual, pustaka kelas, dan kerangka kerja untuk mengimplementasikan banyak jenis aplikasi, termasuk yang CLI.

Jadi, kembali ke pertanyaan Anda, dapatkah kami mengatakan bahwa Node.js adalah server web? Mari kita ubah "Node.js" menjadi "JRE" dan jawab jika JRE adalah server web. Jawabannya adalah tidak.

Semua yang bisa kami katakan adalah bahwa Node.js adalah lingkungan runtime yang dapat digunakan seseorang untuk mengimplementasikan server web. Nah, itu pendapat saya.

ezpresso.dll
sumber
Anda mengabaikan tujuan memiliki runtime itu di tempat pertama - serta tidak berguna memilikinya tanpa semua modul [ nodejs.org/docs/latest-v9.x/api/] yang penting untuk membuatnya melakukan sesuatu yang benar-benar berguna.
Batang
19

Mengatakan node adalah server web seperti mengatakan javacript hanya dapat berjalan di dalam browser, Anda dapat mengatakannya tetapi juga dapat melakukan banyak hal lain.

NodeJS

  1. [Lingkungan waktu proses Javascript (mesin Chrome v8) + Perpustakaan Node / API]
  2. Dapat membuat server web, juga dapat disebut sebagai server Aplikasi

Mengekspresikan

  1. Kerangka kerja web (menggunakan server web nodejs untuk melayani file)

Nginx

  1. Server web

Dalam produksi kebanyakan orang menggunakan Nginx di depan server node sebagai server proxy untuk melayani file statis dan berbagai elemen lainnya seperti caching, perutean, dll.

Esakki Krishnan
sumber
1
ditambah satu untuk menyebutkan bahwa NodeJS dapat digunakan untuk server web dan server Aplikasi, dan untuk menyebutkan Express.
Yahya
16

Saya akan mengklasifikasikan node.js sebagai kerangka server, dengan paket yang tersedia yang dapat menggunakannya sebagai server HTTP, atau server WebSocket, atau protokol khusus Anda sendiri, dll.

Alasan Anda meletakkan nginx di depan server node.js adalah untuk load balancing HTTP dan reverse proxying di beberapa mesin yang menjalankan aplikasi server Anda.

cmv
sumber
1
Iya. Kerangka web membantu Anda membuat aplikasi web, yang menggunakan HTML dan JavaScript untuk UI, dan berkomunikasi melalui HTTP. Contoh kerangka web adalah Express untuk node.js, atau Django untuk Python.
cmv
Jawaban terbaik dari semua upaya. +1.
Batang
Saya kira menempelkan ngnix tidak akan menjadi solusi yang tepat, kita dapat menggunakan proxy hs untuk solusi load balncing
Kartikeya Sharma
@cmv maaf Saya terlambat ke obrolan !!! Apakah Anda harus meletakkan nginx di depan node tetapi ada Load Balancer di atasnya? Dapatkah saya meletakkan penyeimbang beban di depan instans EC2 dan menyelesaikannya untuk membiarkannya menyalurkan langsung ke node dan mengekspresikan titik akhir?
lopezdp
4

Betapa aku merasakan sakitmu!

Seperti banyak orang, saya merasa sulit untuk mendapatkan inti dari Node.js karena kebanyakan orang hanya menulis / berbicara tentang bagian dari Node yang mereka anggap berguna - dan bagian yang mereka anggap menarik biasanya merupakan manfaat sekunder dari Node daripada yang utama. tujuan. Saya harus mengatakan bahwa menurut saya orang gila mengatakan bahwa Node hanyalah runtime JavaScript. Penggunaan JavaScript oleh Node - dan pemilihan runtime V8-nya - hanyalah sarana untuk mencapai tujuan , alat terbaik untuk masalah yang ingin diselesaikan oleh pengembang Node.

Tujuan utama Node adalah membuat pengelolaan acara pengguna di aplikasi web lebih efisien. Jadi Node sangat banyakdigunakan di bagian belakang aplikasi web. Manajemen acara menuntut ada sesuatu yang mendengarkan di mesin server untuk kejadian pengguna ini. Jadi server http harus diatur untuk merutekan setiap kejadian ke skrip penangan yang sesuai. Node menyediakan kerangka kerja untuk dengan cepat menyiapkan server untuk mendengarkan pada port khusus untuk permintaan pengguna. Node menggunakan JavaScript untuk penanganan peristiwa karena JavaScript memiliki fungsi panggilan balik: ini memungkinkan satu tugas ditangguhkan hingga hasil tugas dependen dikembalikan. Tidak banyak bahasa lain yang memiliki fitur ini dan bahasa yang tidak memiliki interpreter seefisien runtime Google V8. Sebagian besar pengembang web mengetahui JavaScript sehingga tidak ada pembelajaran bahasa tambahan dengan Node. Terlebih lagi, memiliki fungsi panggilan balik memungkinkan penempatan semua tugas pengguna pada satu utastanpa pemblokiran eksplisit diterapkan pada tugas yang menuntut akses ke database atau sistem file. Dan inilah yang mengarah pada efisiensi eksekusi yang superior dari Node di bawah penggunaan bersamaan yang berat - tujuan utama pengembangannya.

Untuk membantu pengguna Node dengan cepat menulis kembali kode akhir, pengembang Node juga mengatur pustaka JS bawaan untuk tugas rutin (misalnya hal-hal yang terkait dengan permintaan HTTP, pengkodean string (de), aliran, dll.) Dan penyimpanan NPM (Manajer Paket Node) : ini adalah kumpulan paket skrip open source yang dikelola pengguna untuk berbagai fungsi standar dan kustom. Semua proyek Node memungkinkan impor paket NPM ke dalam proyek melalui perintah npm install .

Permintaan pengguna yang ditangani melalui Node akan menjadi hal-hal yang dibutuhkan oleh aplikasi web seperti otentikasi, kueri database, manajemen konten (Strapi CMS), dll. Semua ini akan dikirim ke port Node. (Di mana analisis data yang didapat dari database membutuhkan banyak waktu CPU, jenis proses ini paling baik diletakkan pada utas terpisah sehingga tidak memperlambat permintaan pengguna yang lebih sederhana.) Jenis permintaan pengguna lainnya, misalnya untuk memuat halaman web lain , download file CSS / JS / gambar, dll, akan terus dikirim oleh browser ke port default di mesin server tempat program server web (Apache, NGinx, dll) akan menanganinya.

Jadi, dalam praktiknya , Node pada dasarnya adalah kerangka kerja untuk pembuatan server dan penanganan peristiwa secara cepat tetapi hanya menggantikan beberapa fungsi program server web.

Penggunaan non-backend lain dari Node cukup mengeksploitasi salah satu fiturnya, misalnya mesin V8. Misalnya, alat build frontend Grunt dan Gulp menggunakan Node.js untuk memproses skrip build yang dapat dikodekan untuk mengonversi SASS ke CSS, memperkecil file CSS / JS, mengoptimalkan ukuran / pemuatan gambar, dll. Tetapi pekerjaan semacam ini benar-benar hanya penggunaan produk sampingan dari Node, bukan penggunaan utamanya yang untuk membuat proses backend yang efisien untuk aplikasi web.

Bagasi
sumber
2

Server web adalah sesuatu yang melayani kliennya melalui internet melalui protokol dan Kerangka Web adalah sesuatu yang kami sebut sebagai kompiler. Ini terdiri dari semua pustaka yang diperlukan, aturan sintaks, dll.

Dan node.js adalah kerangka kerja !!

Pembuat kode gila.
sumber
2
Tetapi bukankah Node menyertakan modul (misalnya http) yang dirancang untuk memungkinkan seseorang dengan cepat membuat kode server mereka sendiri?
Batang
1

Menurut saya masalahnya adalah terminologi "web server" atau "web application server" didominasi oleh dunia JEE, dan produknya, yang tidak termodulasi seperti dunia framework Javascript saat ini, yang pada gilirannya dapat digabungkan lebih atau kurang dengan bebas.

Saya tidak melihat alasan mengapa teknologi, yang dapat melayani aplikasi kompleks melalui web, tidak boleh disebut server web, atau server aplikasi web!

Jika Anda menggabungkan, katakanlah Nuxt sebagai frontend, dengan Feathers sebagai backend - Anda akan memiliki backend yang menyajikan REST API dan UI yang dirender sisi server!

Tentu saja, Anda dapat (salah) menggunakannya untuk menyajikan konten statis - kemudian saya akan menyebutnya server web, atau Anda dapat menggunakannya untuk membuat dan menyajikan aplikasi lengkap - kemudian saya akan menyebutnya server aplikasi web.

Ini adalah fitur atau kualitas gabungan yang diringkas untuk melayani tujuan - bukan? - Fitur seperti stabilitas, skalabilitas, dan semacamnya adalah IMHO sesuatu yang akan ditambahkan ke teknologi tersebut, seiring waktu. Untuk saat ini, mereka masih cukup baru.

cslotty.dll
sumber
0

Saya baru saja menggunakan Node.js untuk pertama kalinya untuk membuat bot Discord. Pikiran saya adalah "Wow, Node.js adalah server? Saya pikir itu adalah perpustakaan JS!" Atau mungkin saya bisa menganggapnya sebagai kerangka kerja.

Apakah ini server web? Tidak, tetapi Anda bisa membuatnya dengan itu. Apakah ini server? Seperti pada perangkat lunak yang menerima pertanyaan dan menyajikan hasilnya? Iya.

Dalam kasus saya, saya telah mengeluarkan perintah: node index.js

Dan sekarang Node.js sedang menunggu permintaan untuk direspon (melalui bot saya). Ini adalah server, tetapi tidak melayani halaman web.

Rick Henderson
sumber
-1

Tidak, ini adalah lingkungan runtime ... jadi ini bukan server web namun tidak memerlukannya untuk dijalankan. Jadi mungkin inilah mengapa ini bisa membingungkan. Ini dapat berjalan mandiri tanpa memerlukan server web apa pun karena ini adalah runtime itu sendiri tetapi sekali lagi ini bukan server web.

stuckedoverflow
sumber
1
Saya pikir jawaban ini - meskipun secara teknis benar - terlalu singkat dan tidak informatif bagi seorang pemula.
Batang