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
node.js
webserver
web-frameworks
Kit Ho
sumber
sumber
Jawaban:
Server web
Server web adalah dasar untuk mengirimkan permintaan / halaman ke klien / pengguna di internet
Kerangka web
Kerangka web menggunakan server web untuk mengirimkan permintaan ke klien, tetapi itu bukan server web.
Node.js
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.
sumber
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" :
Juga Ensiklopedia PCMAG.COM memberikan definisi berikut dari "mesin runtime":
Juga artikel Wikipedia berjudul "Run-time system" menyatakan:
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.
sumber
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
Mengekspresikan
Nginx
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.
sumber
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.
sumber
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.
sumber
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 !!
sumber
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.
sumber
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.
sumber
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.
sumber