node.jsはWebサーバーであると言えますか?


92

WebフレームワークとWebサーバーを混同していることがわかりました。

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はWebサーバーであると言えますか?私はウェブサーバー/フレームワークの間でとても混乱しています。

どういうわけかnode.jsがwebframeworkではなく一種のwebserverである場合(Expressはそうです)、なぜnode.js全体をNginxサーバーの上に置く必要があるのですか? SOに関する質問

誰が助けることができますか?

キット


4
Tornadoは、Webサーバー+小さなWebフレームワークです。:)私はezpressoが正しいと思います。Node.jsは、実際にはJavaのJREによく似たランタイム環境です。Node.jsは、Web以外のアプリケーションでますます使用されています。Node.jsを使用して作成したプログラムには、追加しない限りWebサーバー機能がありません。確かに、Node.jsには非常に高レベルのネイティブ関数があり、http.CreateServer(...)。listen(80);を使用してWebサーバーを簡単に作成できます。ただし、これを追加しない限り、プログラムにはWebサーバーは存在しません。したがって、Node.js自体はWebサーバーではありません。むしろ、Node.jsを使用して作成します。
OCDev 2014

1
厳密に言えば、Node.jsの上にWebサーバーを配置する必要ありません。Nodeプロジェクト内に小さなサーバーを作成して、関連するWebアプリに固有の要求だけでなくすべての定期的なブラウザー要求を処理することができます。ただし、Webページの変更などは、NginxなどのWebサーバーによってより適切に処理されます。したがって、NodeにWebサーバーを含める必要はありませんが、そうする方が賢明な場合がよくあります。
トランク

C ++はWebサーバーですか?いいえ、それはあなたがそれを書くために使うことができるプログラミング言語です。node.jsと同じです。
alfadog 6719年

回答:


53

Webサーバー

Webサーバーは、インターネット経由でアクセスできるコンテンツの配信を支援するハードウェア(コンピューター)またはソフトウェア(コンピューターアプリケーション)のいずれかを指します。1

Webサーバーの主な機能は、要求に応じてWebページをクライアントに配信することです。これは、HTMLドキュメントと、画像、スタイルシート、スクリプトなど、ドキュメントに含まれる可能性のある追加コンテンツの配信を意味します。

Webサーバーは、インターネット上のクライアント/ユーザーにリクエスト/ページを配信するための基本です。

Webフレームワーク

Webアプリケーションフレームワークは、動的なWebサイト、Webアプリケーション、およびWebサービスの開発をサポートするように設計されたソフトウェアフレームワークです。このフレームワークは、Web開発で実行される一般的なアクティビティに関連するオーバーヘッドを軽減することを目的としています。たとえば、多くのフレームワークは、データベースアクセス、テンプレートフレームワーク、およびセッション管理用のライブラリを提供し、多くの場合、コードの再利用を促進します。

Webフレームワークは、Webサーバーを使用して要求をクライアントに配信しますが、Webサーバーではありません。

Node.js

Node.jsは、ChromeのJavaScriptランタイム上に構築されたプラットフォームであり、高速でスケーラブルなネットワークアプリケーションを簡単に構築できます。Node.jsは、イベント駆動型の非ブロッキングI / Oモデルを使用しており、軽量で効率的であり、分散デバイス間で実行されるデータ集約型のリアルタイムアプリケーションに最適です。

ただし、CLIアプリを作成することもできるので、最初のようにブラウザーだけでなく、Javascript プログラミング言語を使用してサーバー(コンピューター)で実行するjavascriptプログラムを作成するためのプラットフォームとして見る必要があると思います。私はあなたがそれをとして見ることができたと思いますJavascript++か?

node.jsのフロントページにあるように、node.jsを使用してWebサーバーを作成することもできます。当初、ライアンは、プロジェクトの安定性のために、node.jsの前にNginxを配置できると述べました。このプロジェクトは今もなおかなり若いです。Nginxは、node.jsがクラッシュする可能性がある間も実行を続ける、実績のあるWebサーバーです。次に、多くのユーザーがnode.jsを使用します。


6
Node.jsのは、JavaScriptのあるランタイム上に構築され、GoogleのV8 JavaScriptエンジン...
ozanmuyes

1
Webサーバー(apacheまたはnginx)をハードウェアにするにはどうすればよいですか?
shadow0359 2017年

主な質問は、Node.jsがデフォルトでHTTPポートをリッスンするかどうかだと思いますか?その場合、HTTPサーバーとしても分類されます。
forsberg 2017

1
正方形は長方形であると言えますが、その逆はありません。Nodejsは単なるWebサーバー以上のものだと言っていますか?それとも、Webサーバーをまったく表していないのですか?
CME 6419年

1
@ shadow0359少し遅れていますが、これを読んでいる人にとって、Webサーバーはソフトウェアだけではありません。また、物理的なハードウェア、ソフトウェアを実行しているコンピュータを意味することができます
クリストファー

25

Node.jsランタイム環境またはランタイムエンジンだと思います。

おそらく私がこれまでに見つけた最良の定義は、RobGravelleによる AnIntrotoNode.js」というタイトルの記事から来ています。

Node.jsは、サーバーサイドJavaScriptを使用してネットワークアプリケーションを構築するための一部のランタイム環境および一部のライブラリです。ChromeのJavaScriptランタイムエンジンを使用して、ブラウザのサンドボックスを必要とせずにJSコードを直接実行します。

また、PCMAG.COM百科事典は、「ランタイムエンジン」の次の定義を提供します

特定のアプリケーションがコンピューターで実行するために依存するソフトウェア。アプリケーションを実行するには、ランタイムエンジンがコンピューターで実行されている必要があります。これは、アプリケーションが必要とする一般的なルーチンと機能を提供し、通常、暫定的な中間言語であるプログラムを機械語に変換します。

また、「ランタイムシステム」というタイトルのウィキペディアの記事は次のように宣言しています。

ランタイムシステム(ランタイムシステム、ランタイム環境、または単にランタイムとも呼ばれます)は、言語がコンパイル型言語、インタープリター型言語、埋め込みドメイン固有言語であるか、APIを介して呼び出されるかにかかわらず、コンピューター言語の基本的な動作を実装します。 pthreadsもそうです。

...ランタイムシステムは、画面にテキストを描画したり、インターネット接続を確立したりするなどのタスクの動作を実装する場合があります。また、通常、オペレーティングシステムによって提供されるサービスの複雑さやバリエーションを隠す抽象化レイヤーとしても機能します。

さて、Node.jsのようなランタイム環境(またはソフトウェアプラットフォーム)はありますか?JREはそのような環境の良い例だと思います。Node.jsとJRE-それらには多くの共通点があります。それらはすべて、(一種の)仮想マシン、クラスライブラリ、およびCLIアプリケーションを含む多くのタイプのアプリケーションを実装するためのフレームワークを備えています。

では、質問に戻りましょう。Node.jsはWebサーバーであると言えますか?「JRE」の「Node.js」を変更して、JREがWebサーバーの場合に答えてみましょう。答えはいいえだ。

私たちが言えることは、Node.jsはWebサーバーを実装するために使用できるランタイム環境であるということだけです。まあ、それは私の意見です。


そもそもそのランタイムを持つという目的と、それを本当に便利にするために不可欠なすべてのモジュール[ nodejs.org/docs/latest-v9.x/api/]なしでランタイムを持つことの無用さを無視します。
トランク

19

ノードがウェブサーバーであると言うことは、javacriptがブラウザ内でのみ実行できると言うようなものです。それは言うことができますが、他の多くのことも実行できます。

NodeJS

  1. [Javascriptランタイム環境(Chrome v8エンジン)+ノードライブラリ/ API]
  2. Webサーバーを作成でき、アプリケーションサーバーとして説明することもできます

Express

  1. Webフレームワーク(nodejsのWebサーバーを使用してファイルを提供します)

Nginx

  1. Webサーバー

本番環境では、ほとんどの人がノードサーバーの前にあるNginxをプロキシサーバーとして使用して、静的ファイルや、キャッシュ、ルーティングなどの他のさまざまな要素を提供します。


1
さらに、NodeJSはWebサーバーとアプリケーションサーバーの両方に使用できること、およびExpressについて言及するための1つです。
Yahya 2017

16

node.jsをサーバーフレームワークとして分類し、HTTPサーバー、WebSocketサーバー、または独自のカスタムプロトコルなどとして使用できるパッケージを利用できます。

node.jsサーバーの前にnginxを配置する理由は、サーバーアプリケーションを実行している複数のマシン間でのHTTP負荷分散とリバースプロキシのためです。


1
はい。Webフレームワークは、UIにHTMLとJavaScriptを使用し、HTTPを介して通信するWebアプリケーションを作成するのに役立ちます。Webフレームワークの例としては、node.jsの場合はExpress、Pythonの場合はDjangoがあります。
cmv 2012

すべての試みの最良の答え。+1。
トランク

ngnixを貼り付けることは適切な解決策ではないと思います。負荷分散ソリューションにhsプロキシを使用できます
KartikeyaSharma19年

@cmvごめんなさい私は会話に遅れました!!! ただし、ノードの前にnginxを配置する必要がありますが、ロードバランサーを配置する必要がありますか?ロードバランサーをEC2インスタンスの前に配置し、それを使用してuin straigtをノードに到達させ、エンドポイントを表現することはできますか?
lopezdp

4

私はあなたの痛みをどのように感じますか!

多くの人と同じように、Node.jsの本質にたどり着くのは難しいと感じました。ほとんどの人は、Nodeの有用だと思う部分だけを書いたり話したりするからです。そして、興味深いと思う部分は、通常、Nodeの主要な利点ではなく、副次的な利点です。目的。Nodeは単なるJavaScriptランタイムであると人々が言うのは気が狂っていると私は言わなければなりません。JavaScriptをノードの使用-とV8ランタイムのその選択-単にある目的を達成するための手段、ノードの開発者が解決したいとの問題のための最高のツール。

Nodeの主な目的は、Webアプリでのユーザーイベントの管理をより効率的にすることでした。だからノードは圧倒的にWebアプリのバックエンドで使用されます。イベント管理では、サーバーマシンでこれらのユーザーイベントをリッスンしているものが必要です。したがって、各イベントを適切なハンドラスクリプトにルーティングするようにhttpサーバーを設定する必要があります。Nodeは、ユーザーの要求を専用ポートでリッスンするようにサーバーをすばやくセットアップするためのフレームワークを提供します。JavaScriptにはコールバック関数があるため、ノードはイベント処理にJavaScriptを使用します。これにより、依存タスクの結果が返されるまで1つのタスクを一時停止できます。他の多くの言語にはこの機能がなく、GoogleのV8ランタイムほど効率的なインタプリタがない言語もあります。ほとんどのWeb開発者はJavaScriptを知っているので、Nodeで追加の言語学習を行う必要はありません。さらに、コールバック関数を使用すると、すべてのユーザータスクを単一のスレッドに配置できますデータベースまたはファイルシステムへのアクセスを要求するタスクに明示的なブロックを適用する必要はありません。そしてこれが、ノードの開発の主な目的である、大量の同時使用の下でのノードの優れた実行効率につながるものです。

Nodeユーザーがバックエンドコードをすばやく作成できるように、Nodeの開発者は、ルーチンタスク(HTTPリクエスト、文字列(デコード)コーディング、ストリームなどに関連する事項)用の組み込みJSライブラリとNPM(Node Package Manager)リポジトリの両方を整理しました。 :これは、さまざまな標準およびカスタム関数用の、ユーザーが管理するオープンソースのスクリプトパッケージのセットです。すべてのノードプロジェクトでは、確立されたnpminstall コマンドを介してNPMパッケージをプロジェクトにインポートできます。

Nodeを介して処理されるユーザー要求は、認証、データベースクエリ、コンテンツ管理(Strapi CMS)などのWebアプリに必要なものになります。これらはすべて、Nodeポートに送信されます。(データベースから取得したデータの分析に多くのCPU時間がかかる場合、このタイプのプロセスは別のスレッドに配置するのが最適であるため、単純なユーザー要求が遅くなることはありません。)他のタイプのユーザー要求(別のWebページの読み込みなど) 、CSS / JS /画像ファイルのダウンロードなどは、引き続きブラウザによって、Webサーバープログラム(Apache、NGinxなど)が処理するサーバーマシンのデフォルトポートに送信されます。

したがって、実際には、Nodeは主にサーバーの迅速な作成とイベント処理のためのフレームワークですが、Webサーバープログラムの一部の機能のみを置き換えるものです。

Nodeの他の非バックエンドの使用法は、V8エンジンなど、その機能のいずれかを利用するだけです。たとえば、フロントエンドビルドツールのGruntとGulpは、Node.jsを使用して、SASSをCSSに変換したり、CSS / JSファイルを縮小したり、画像サイズや読み込みを最適化したりするようにコーディングできるビルドスクリプトを処理します。しかし、この種の作業は実際にはNodeの副産物の使用であり、Webアプリケーションの効率的なバックエンドプロセスを作成するための主な使用ではありません。


2

Webサーバーは、プロトコルを介してインターネットを介してクライアントにサービスを提供するものであり、Webフレームワークはコンパイラーと呼ばれるものです。これは、必要なすべてのライブラリ、構文規則などで構成されています。

そしてnode.jsはフレームワークです!!


2
しかし、Nodeには、独自のサーバーをすばやくコーディングできるように設計されたモジュール(httpなど)が含まれていませんか?
トランク

1

問題は、「Webサーバー」または「Webアプリケーションサーバー」という用語がJEEの世界と、今日のJavascriptのフレームワークの世界ほどモジュール化されていない製品によって支配されていることだと思います。自由に。

私は、ウェブ上で複雑なアプリケーションを提供することができます技術は、必要がある理由見ていないではないWebサーバと呼ばれる、またはWebアプリケーションサーバを!

組み合わせる場合、たとえば、フロントエンドとしてNuxtを、バックエンドとしてFeathersを使用すると、RESTAPIとサーバー側でレンダリングされたUIを提供するバックエンドができます。

もちろん、静的コンテンツを提供するためにそれを(誤)使用することもできます-それから私はそれをWebサーバーと呼ぶか、それを使用して完全なアプリケーションを作成して提供することができます-そして私はそれをWebアプリケーションサーバーと呼びます。

目的を果たすためにまとめられるのは、組み合わされた機能または品質です-そうですか?-安定性、スケーラビリティなどの機能は、時間の経過とともにこれらのテクノロジに追加されるIMHOです。今のところ、それらはまだかなり新しいです。


0

初めてNode.jsを使用してDiscordボットを作成しました。「うわー、Node.jsはサーバーですか?JSライブラリだと思いました!」と思いました。あるいは、それをフレームワークとして考えることもできたでしょう。

それはウェブサーバーですか?いいえ、でもそれで作ることができます。サーバーですか?クエリを受信して​​結果を提供するソフトウェアのように?はい。

私の場合、次のコマンドを発行しました。 node index.js

そして今、Node.jsは(私のボットを介して)応答するリクエストを待っています。サーバーですが、Webページを提供していません。


-1

いいえ、ランタイム環境です...したがって、Webサーバーではありませんが、実行する必要はありません。おそらくこれが混乱を招く可能性がある理由です。ランタイム自体であるため、Webサーバーを必要とせずにスタンドアロンで実行できますが、Webサーバーではありません。


1
この答えは、技術的には真実ですが、短すぎて、初心者にとって有益ではないと思います。
トランク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.