web-dev-qa-db-ja.com

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

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に関する質問

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

キット

75
Kit Ho

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アプリを作成することもできます。そのため、 Javascriptprogramming language を使用して、サーバー(コンピューター)で実行するjavascriptプログラムを作成するプラットフォームとして見るべきです。最初のようにブラウザ内だけでなく。あなたはそれをJavascript++ ??

Node.jsのフロントページにあるように、node.jsを使用してWebサーバーを作成することもできます。初めに、ライアンは、プロジェクトの安定性のために、node.jsの前に Nginx を置くことができると言いました。このプロジェクトは今もまだかなり若いです。 Nginxは実証済みのWebサーバーであり、node.jsがクラッシュする可能性がありますが実行し続けます。それから再び多くのユーザーがそのためにnode.jsを使用します。

49
Alfred

Node.jsRuntime Environment またはRuntime Engineです。

おそらく私がこれまでに見つけた最良の定義は、 "An Intro to Node.js" :というタイトルのRob Gravelleの記事から来ています。

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

また、PCMAG.COMエンサイクロペディアは、「ランタイムエンジン」の 次の定義 を提供します。

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

また、 Wikipediaの記事 「ランタイムシステム」というタイトルの宣言:

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

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

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

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

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

20
ezpresso

ノードがWebサーバーであると言うことは、javacriptがブラウザー内でのみ実行できると言っているようなものです。

NodeJS

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

エクスプレス

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

Nginx

  1. Webサーバー

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

14
Esakki Krishnan

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

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

13
cmv

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

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

2
Mad coder.

問題は、「Webサーバー」または「Webアプリケーションサーバー」の用語がJEEの世界と製品に支配されていることだと思います。自由に。

Web上で複雑なアプリケーションを提供できる技術が、notWebサーバーまたはWebアプリケーションサーバーと呼ばれるべきではない理由はわかりません!

組み合わせる場合は、フロントエンドとして Nuxt を、バックエンドとして Feathers を使用します。REST APIを提供するバックエンドがありますそして、サーバー側のレンダリングされたUI!

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

目的を果たすために要約されるのは、組み合わされた機能または品質です。 -安定性、スケーラビリティなどの機能は、これらのテクノロジーに今後追加される予定の私見です。今のところ、彼らはまだかなり新しいです。

1
cslotty

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

0
stuckedoverflow

どのようにあなたの痛みを感じる!

多くの人がそうであるように、Node.jsの本質に到達するのは難しいと感じました。なぜなら、ほとんどの人は、Node役に立つと思う部分だけを書いたり話したりするからです。 Nodeの二次的な利点ではなく、主な目的ではありません。人々がNodeは単なるJavaScriptランタイムです。ノードのJavaScriptの使用(およびそのV8ランタイムの選択)は、単に目的のための手段であり、Nodeの開発者が解決したかった問題に最適なツールです。

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

Nodeユーザーがバックエンドコードをすばやく書くために、Nodeの開発者はNPM(Node Package Manager)リポジトリも編成しました。これは、さまざまな標準およびカスタムのオープンソースのユーザー駆動スクリプトパッケージすべてのNodeプロジェクトでは、確立されたnpm installコマンドを介してNPMパッケージをプロジェクトにインポートできます。

Nodeを介して処理されるユーザーリクエストは、register/login/logout/formフィールド検証のようなものになり、Webアプリに必要なさまざまなデータベースクエリはNode = port。他の種類のユーザーリクエスト、たとえば、別のWebページの表示、CSS/JS/imagesのダウンロードなどは、Nodeにも送信できます。ただし、これらは通常、= Node portですが、Webサーバーがそれらを処理するサーバーマシンのデフォルトポートにブラウザから送信され続けます。

したがって、実際には、Nodeは通常サーバーですが、some) Webサーバープログラムの機能。Nodeのその他の使用法は、V8エンジンなどの機能のいずれかを利用するだけです。しかし、これらは実際にはNodeの副産物の使用法です。

0
Trunk