Node.js'nin bir web sunucusu olduğunu söyleyebilir miyiz?


92

Web çerçevesi ve web sunucusu arasında kafa karıştırdığımı buldum.

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

Node.js bir web sunucusu diyebilir miyiz ??? Web sunucusu / çerçeve arasında çok kafam karıştı.

Eğer node.js bir şekilde web sunucusu ise, webframework değil (Express yapar), neden tüm node.js'yi yararlı pratikte Nginx sunucusunun üstüne koymamız gerekiyor? SO ile ilgili soru

Kim yardım edebilir ???

Kit


4
Tornado bir web sunucusu + küçük bir web çerçevesidir. :) Bence ezpresso doğru. Node.js aslında Java'nın JRE'sine çok benzer bir çalışma ortamıdır. Node.js, web dışı uygulamalar için giderek daha fazla kullanılıyor. Node.js ile yazdığınız programların siz eklemedikçe web sunucusu özelliği yoktur. Verilen, Node.js, http.CreateServer (...) ile kolayca bir web sunucusu oluşturmanıza izin veren çok yüksek seviyeli yerel işlevlere sahiptir. Listen (80); ancak siz bunu eklemediğiniz sürece programınızda web sunucusu yoktur. Yani Node.js kendisi bir web sunucusu değildir. Bunun yerine, bir tane oluşturmak için Node.js kullanırsınız.
OCDev

1
Açıkçası , Node.js'nin üstüne bir web sunucusu koymanıza gerek yoktur - Node projeniz içinde küçük bir sunucu yazabilir ve bunun tüm rutin tarayıcı isteklerini ve ilgili web uygulamasına özgü olanları işlemesini sağlayabilirsiniz. Ancak web sayfası değişiklikleri gibi şeyler, örneğin Nginx gibi bir web sunucusu tarafından daha iyi ele alınır. Dolayısıyla, Node ile bir web sunucusuna dahil olmak zorunda olmasanız da, bunu yapmak genellikle daha akıllıca olur.
Trunk

C ++ bir web sunucusu mu? Hayır, yazmak için kullanabileceğiniz bir programlama dili. Node.js ile aynı
alfadog67

Yanıtlar:


53

Web sunucusu

Web sunucusu, İnternet üzerinden erişilebilen içeriğin sağlanmasına yardımcı olan donanıma (bilgisayar) veya yazılıma (bilgisayar uygulaması) başvurabilir. 1

Bir web sunucusunun birincil işlevi, istek üzerine web sayfalarını istemcilere sunmaktır. Bu, HTML belgelerinin ve görüntüler, stil sayfaları ve komut dosyaları gibi bir belgeye dahil edilebilecek her türlü ek içeriğin teslim edilmesi anlamına gelir.

Bir web sunucusu, internet üzerinden istemcilere / kullanıcıya istek / sayfa göndermenin temelidir

Web çerçevesi

Bir web uygulaması çerçevesi, dinamik web sitelerinin, web uygulamalarının ve web hizmetlerinin geliştirilmesini desteklemek için tasarlanmış bir yazılım çerçevesidir. Çerçeve, Web geliştirmede gerçekleştirilen ortak etkinliklerle ilişkili ek yükü hafifletmeyi amaçlamaktadır. Örneğin, birçok çerçeve veritabanı erişimi, şablon oluşturma çerçeveleri ve oturum yönetimi için kitaplıklar sağlar ve genellikle kodun yeniden kullanımını destekler.

Bir web çerçevesi, istekleri istemciye iletmek için bir web sunucusu kullanır, ancak bu web sunucusu değildir.

Node.js

Node.js, hızlı, ölçeklenebilir ağ uygulamalarını kolayca oluşturmak için Chrome'un JavaScript çalışma zamanı üzerine oluşturulmuş bir platformdur. Node.js, onu hafif ve verimli kılan olay odaklı, engellemeyen bir G / Ç modeli kullanır ve dağıtılmış cihazlarda çalışan, veri yoğun gerçek zamanlı uygulamalar için mükemmeldir.

Ama sonra yine CLI uygulamaları da yaratabilirsiniz, bu yüzden onu başlangıçta olduğu gibi sadece tarayıcıda değil Javascript programlama dilini kullanarak sunucunuzda (bilgisayarınızda) çalıştırmak için javascript programları yazmak için bir platform olarak görmeniz gerektiğini düşünüyorum . Sanırım bunu görebiliyordunuz Javascript++?

Node.js'nin ön sayfasında görebileceğiniz gibi, web sunucusunu node.js ile de yazabilirsiniz. Başlangıçta Ryan koymak söyledi Nginx nedeniyle projenin Stabilite ait node.js önünde. Proje oldukça gençti ve hala da öyle. Nginx, node.js çökebilirken çalışmaya devam edecek kanıtlanmış bir web sunucusudur. Sonra yine birçok kullanıcı bunun için node.js kullanır.


6
Node.js, Google'ın V8 JavaScript motoru üzerine kurulmuş bir JavaScript çalışma
zamanıdır

1
Web sunucuları (apache veya nginx) nasıl donanım olabilir?
shadow0359

Bence asıl soru Node.js varsayılan olarak HTTP portunu dinliyor mu? Eğer öyleyse, onu bir HTTP sunucusu olarak da sınıflandırır.
forsberg

1
Karenin bir dikdörtgen olduğunu söyleyebiliriz, ancak tam tersi değil. Nodejs'in bir web sunucusundan daha fazlası olduğunu mu söylüyorsunuz? yoksa bir web sunucusunu temsil etmiyor mu?
CME64

1
@ shadow0359 Biraz geç, ama bunu okuyan herkes için web sunucusu sadece bir yazılım değil. Yazılımın çalıştığı bilgisayar olan fiziksel donanım anlamına da gelebilir
Christoffer

25

Node.js'nin bir Runtime Environment veya bir Runtime Engine olduğunu söyleyebilirim .

Muhtemelen şimdiye kadar bulduğum en iyi tanım, Rob Gravelle tarafından yazılan " Node.js'ye Giriş" başlıklı bir makaleden geliyor :

Node.js, sunucu tarafı JavaScript kullanarak ağ uygulamaları oluşturmak için kısmi çalışma zamanı ortamı ve parça kitaplığıdır. JS kodunu, tarayıcı sanal alanına ihtiyaç duymadan doğrudan yürütmek için Chrome'un JavaScript çalışma zamanı motorunu kullanır.

Ayrıca PCMAG.COM Encyclopedia, "çalışma zamanı motoru" için aşağıdaki tanımları sağlar :

Bilgisayarda çalışmak için belirli uygulamaların bağlı olduğu yazılım. Uygulamanın çalışması için, çalışma zamanı motorunun bilgisayarda çalışıyor olması gerekir. Uygulamaların ihtiyaç duyduğu ortak rutinleri ve fonksiyonları sağlar ve tipik olarak ara, ara dilde olan programı makine diline dönüştürür.

Ayrıca "Çalışma zamanı sistemi" başlıklı Wikipedia makalesi şunları beyan eder:

Bir çalışma zamanı sistemi (çalışma zamanı sistemi, çalışma zamanı ortamı veya sadece çalışma zamanı olarak da adlandırılır), dil ister derlenmiş bir dil, yorumlanmış dil, ister yerleşik etki alanına özel dil olsun, ister bir API aracılığıyla çağrılmış olsun, bir bilgisayar dilinin temel davranışını uygular. pthreads olduğu gibi.

... Bir çalışma zamanı sistemi, ekranda metin çizme veya İnternet bağlantısı kurma gibi görev davranışlarını uygulayabilir. Ayrıca, tipik olarak, işletim sistemi tarafından sunulan hizmetlerdeki karmaşıklığı veya varyasyonları gizleyen bir soyutlama katmanı görevi görür.

Peki, orada Node.js gibi herhangi bir çalışma zamanı ortamı (veya hatta yazılım platformları) var mı? Sanırım JRE böyle bir ortama iyi bir örnek. Node.js ve JRE - birçok ortak yönleri vardır. Hepsinde (bir tür) sanal makine, bir sınıf kitaplığı ve CLI olanlar da dahil olmak üzere birçok uygulama türünü uygulamak için bir çerçeve vardır.

Öyleyse sorunuza dönersek, Node.js'nin bir web sunucusu olduğunu söyleyebilir miyiz? "JRE" için "Node.js" yi değiştirelim ve JRE bir web sunucusu ise cevaplayalım. Cevap hayır.

Söyleyebileceğimiz tek şey, Node.js'nin bir web sunucusunu uygulamak için kullanabileceği bir çalışma ortamı olduğudur. Benim fikrim bu.


İlk etapta bu çalışma zamanına sahip olma amacını - ve onu gerçekten yararlı bir şey yapması için gerekli olan tüm modüller [ nodejs.org/docs/latest-v9.x/api/] olmadan sahip olmanın yararsızlığını görmezden gelirsiniz .
Trunk

19

Düğümün bir web sunucusu olduğunu söylemek, javacript'in yalnızca bir tarayıcının içinde çalışabileceğini söylemek gibidir, bunu söyleyebilirsin ama başka birçok şey de yapabilir.

NodeJS

  1. [Javascript çalışma zamanı ortamı (Chrome v8 motoru) + Düğüm Kitaplığı / API'ler]
  2. Bir web sunucusu oluşturabilir, ayrıca bir Uygulama sunucusu olarak da tanımlanabilir

Ekspres

  1. Web çerçevesi (dosyaları sunmak için node.js'nin web sunucusunu kullanır)

Nginx

  1. Web sunucusu

Üretimde çoğu insan, statik dosyaları ve önbelleğe alma, yönlendirme vb. Gibi diğer çeşitli öğeleri sunmak için bir proxy sunucusu olarak düğüm sunucusunun önünde Nginx kullanır


1
artı bir de NodeJS'nin hem web sunucusu hem de Uygulama sunucusu için kullanılabileceğini ve Express'ten bahsetmek için.
Yahya

16

Node.js'yi bir HTTP sunucusu veya bir WebSocket sunucusu veya kendi özel protokolünüz vb. Olarak kullanabilen paketlerle birlikte bir sunucu çerçevesi olarak sınıflandırırdım.

Nginx'i node.js sunucunuzun önüne koymanızın nedeni, HTTP yük dengeleme ve sunucu uygulamanızı çalıştıran çeşitli makinelerde ters proxy yapmaktır.


1
Evet. Web çerçevesi, kullanıcı arabirimi için HTML ve JavaScript kullanan ve HTTP üzerinden iletişim kuran bir web uygulaması yazmanıza yardımcı olur. Web çerçevesinin örnekleri, node.js için Express veya Python için Django olabilir.
cmv

Tüm girişimlerin en iyi yanıtı. +1.
Bagaj

sanırım ngnix'i yapıştırmak uygun bir çözüm olmazdı, yük dengeleme çözümü için hs proxy kullanabiliriz
Kartikeya Sharma

@cmv özür dilerim konvoya geç kaldım !!! Nginx'i düğümün önüne koymanız gerekiyor, ancak bunun üzerine bir Yük Dengeleyici mi? Yük dengeleyiciyi EC2 bulut sunucusunun önüne koyabilir miyim ve bununla işim, düğümün içinden geçerek uç noktaları ifade etmesine izin verir mi?
lopezdp

4

Acını nasıl hissediyorum!

Çoğu kişi gibi, ben de Node.js'nin özüne ulaşmakta zorlandım çünkü çoğu insan Node'un yalnızca yararlı buldukları kısmı hakkında yazıyor / konuşuyor - ve ilginç buldukları kısım genellikle Node'un birincil faydasından ziyade ikincil bir faydası. amaç. İnsanların Node'un sadece bir JavaScript çalışma zamanı olduğunu söylemesinin çılgınca olduğunu söylemeliyim. Node'un JavaScript kullanımı ve V8 çalışma zamanını seçmesi, Node'un geliştiricilerinin çözmek istediği problem için en iyi araçların amacına ulaşması anlamına gelir .

Düğümün birincil amacı, bir web uygulamasındaki kullanıcı olaylarının yönetimini daha verimli hale getirmekti. Yani Düğüm ezici bir çoğunluklabir web uygulamasının arka ucunda kullanılır. Olay yönetimi, bu kullanıcı olayları için sunucu makinede bir şeyin dinlemesini gerektirir. Bu nedenle, her olayı uygun işleyici betiğine yönlendirmek için bir http sunucusu kurulmalıdır. Düğüm, bir sunucuyu kullanıcı istekleri için ayrılmış bir bağlantı noktasında dinlemek üzere hızlı bir şekilde kurmak için bir çerçeve sağlar. Düğüm, olay işleme için JavaScript kullanır çünkü JavaScript geri arama işlevlerine sahiptir: bu, bağımlı bir görevin sonucu döndürülene kadar bir görevin askıya alınmasına izin verir. Diğer pek çok dilde bu özellik yoktur ve olmayanlar Google'ın V8 çalışma zamanı kadar verimli bir tercümana sahip olmayabilir. Çoğu web geliştiricisi JavaScript'i bilir, bu nedenle Node ile ek dil öğrenimi olmaz. Dahası, geri arama işlevlerine sahip olmak , tüm kullanıcı görevlerinin tek bir iş parçacığına yerleştirilmesine olanak tanırVeritabanına veya dosya sistemine erişim gerektiren görevlere açık engelleme uygulanmadan. Ve bu, Node'un yoğun eşzamanlı kullanım altında üstün yürütme verimliliğine götüren şeydir - gelişiminin birincil amacı.

Node kullanıcılarının hızlı bir şekilde arka uç kodu yazmasına yardımcı olmak için, Node'un geliştiricileri ayrıca rutin görevler (ör. HTTP istekleri, dize (de) kodlama, akışlar vb. İle ilgili konular) ve NPM (Node Package Manager) deposu için yerleşik bir JS kitaplığı düzenledi. : Bu, çeşitli standart ve özel işlevler için açık kaynaklı, kullanıcı tarafından sağlanan komut dosyası paketleri setidir. Tüm Düğüm projeleri, NPM paketlerinin oluşturulan npm install komutu aracılığıyla bir projeye aktarılmasına izin verir .

Node aracılığıyla işlenen kullanıcı istekleri, kimlik doğrulama, veritabanı sorgulama, içerik yönetimi (Strapi CMS) vb. Gibi web uygulamasının ihtiyaç duyduğu şeyler olacaktır. Tüm bunlar Node portuna gönderilecektir. (Veritabanından alınan verilerin analizinin çok fazla CPU zamanı aldığı durumlarda, bu tür bir işlem en iyi şekilde ayrı bir iş parçacığına yerleştirilir, böylece daha basit kullanıcı isteklerini yavaşlatmaz.) Diğer kullanıcı istek türleri, örneğin başka bir web sayfasını yüklemek için , indirilen CSS / JS / resim dosyaları, vb., tarayıcı tarafından web sunucusu programının (Apache, NGinx, vb.) bunları işleyeceği sunucu makinesindeki varsayılan bağlantı noktalarına gönderilmeye devam edilecektir.

Bu nedenle, pratikte Node, temelde hızlı sunucu oluşturma ve olay işleme için bir çerçevedir, ancak web sunucusu programının yalnızca bazı işlevlerinin yerine geçer .

Node'un diğer arka uç olmayan kullanımları, yalnızca bir veya diğer özelliklerinden yararlanır, örneğin V8 motoru. Örneğin, ön uç oluşturma araçları Grunt ve Gulp, SASS'yi CSS'ye dönüştürmek, CSS / JS dosyalarını küçültmek, görüntü boyutunu / yüklemeyi optimize etmek vb. İçin kodlanabilen bir derleme komut dosyasını işlemek için Node.js kullanır. Ancak bu tür bir çalışma gerçekten Yalnızca Node'un yan ürün kullanımı, web uygulamaları için verimli arka uç işlemleri yapmak için temel kullanımı değil.


2

Web sunucusu, müşterilerine protokoller üzerinden internet üzerinden hizmet veren bir şeydir ve Web Framework, derleyici olarak adlandırdığımız bir şeydir. Gerekli tüm kitaplıklardan, sözdizimi kurallarından vb. Oluşur.

Ve node.js bir çerçevedir !!


2
Ancak Node, birinin kendi sunucusunu hızlı bir şekilde kodlamasını sağlamak için tasarlanmış modüller (örneğin http) içermiyor mu?
Trunk

1

Bence sorun şu ki, "web sunucusu" veya "web uygulama sunucusu" terminolojisine JEE dünyası ve günümüzün Javascript çerçeve dünyası kadar modülerleştirilmemiş ürünler hakimdir ve bunlar daha çok veya daha az birleştirilebilir özgürce.

Ben hayır, web üzerinden karmaşık uygulamalar hizmet edebilir bir teknoloji, neden sebep göremiyorum değil bir web sunucusu olarak adlandırılabilir ya da web uygulaması sunucusu!

Bir araya getirirseniz , bir ön uç olarak Nuxt , arka uç olarak Tüyler ile birlikte diyelim - bir REST API'si ve sunucu tarafında oluşturulmuş bir UI sunan bir arka uca sahip olacaksınız!

Elbette, bunu statik içerik sunmak için (yanlış) kullanabilirdiniz - o zaman buna bir web sunucusu derdim veya tam bir uygulama yapmak ve sunmak için kullanabilirsiniz - o zaman buna bir web uygulama sunucusu derdim.

Bir amaca hizmet etmek için bir araya gelen özellikler veya nitelikler - değil mi? - Kararlılık, ölçeklenebilirlik ve benzeri özellikler, zamanla bu teknolojilere eklenecek olan IMHO'dur. Şimdilik, hala oldukça yeniler.


0

Discord botu oluşturmak için ilk kez Node.js kullandım. Düşüncem "Vay canına, Node.js bir sunucu mu? Onun bir JS kitaplığı olduğunu düşündüm!" Ya da belki bunu bir çerçeve olarak düşünebilirdim.

Bir web sunucusu mu? Hayır ama onunla bir tane yapabilirsin. Bu bir sunucu mu? Sorguları alan ve sonucu sunan yazılımda olduğu gibi mi? Evet.

Benim durumumda şu komutu verdim: node index.js

Ve şimdi Node.js yanıtlama isteklerini bekliyor (benim botum aracılığıyla). Bu bir sunucudur, ancak web sayfalarına hizmet vermemektedir.


-1

Hayır, bu bir çalışma ortamı ... bu yüzden bir web sunucusu değil, ancak çalıştırılması için birine ihtiyacı yok. Muhtemelen bu yüzden kafa karıştırıcı olabilir. Herhangi bir web sunucusuna ihtiyaç duymadan bağımsız olarak çalışabilir, çünkü kendisi bir çalışma zamanıdır ancak yine bir web sunucusu değildir.


1
Bu cevabın - teknik olarak doğru olsa da - çok kısa olduğunu ve yeni bir arı için bilgilendirici olmadığını düşünüyorum.
Trunk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.