web-dev-qa-db-ja.com

ApacheをNode.jsに置き換えることはできますか?

通常の容疑者(Apache、MySQL、およびPHP)を使用して、CentOSでWebサイトを実行しています。このWebサイトが最初に開始されて以来、かなり進化してきたので、今度はもっと気の利いたこと、つまりリアルタイム通知を行いたいと思います。私が読んだことから、Apacheはこれをうまく処理しません。私はApacheだけをNode.jsに置き換えることができるのだろうかと思っています(「 LAMP 」の代わりに「LNMP」になります)。

ソリューションをオンラインで検索しようとしましたが、見つかりませんでした。私が読んだことを正しく解釈しているなら、ほとんどの人がNode.jsはApacheとPHPの両方を置き換えることができると言っているようです。ただし、既存のPHPコードがたくさんあるので、そのままにしておきます。

まだ明らかではない場合、私はかなり混乱しており、Enlightenmentを使用できます。どうもありがとう!

151
Rick

JavaScriptでPHPを書き直す準備ができていれば、はい、Node.jsでApacheを置き換えることができます。

サーバーとクライアント間にリバースプロキシモードで実行されているApacheまたはNGINXインスタンスを配置する場合、すべてのPHP JavaScriptコード付き。これは幸せな媒体かもしれません:WebSocketはNode.jsで動作し、Apache + PHPでより平凡な動作をします。

87
sarnold

Node.jsは、イベント/ノンブロッキングアーキテクチャのおかげでApacheより高速かもしれませんが、Apache機能の一部を置き換えるモジュール/ライブラリを見つけるのに問題があるかもしれません。

Node.js自体は軽量の低レベルフレームワークであり、Webアプリケーションのサーバー側のものとリアルタイム部分を比較的迅速に構築できますが、Apacheははるかに幅広い構成オプションと「古典的な」Webサーバー指向の機能を提供します。

PHPをexpress.jsのようなnode.jsベースのWebアプリケーションフレームワークに置き換えたくない場合は、Apacheにとどまる必要があります(またはパフォーマンスに問題がある場合はNginxへの移行を検討してください)。

26
yojimbo87

Node.jsはWebサービスの未来だと思いますが、既存のPHPコードがたくさんある場合は、Apache/MySQLが最善の策です。 Node.jsにリクエストをプロキシするようにApacheを構成することも、Apacheにリクエストをプロキシすることもできますが、両方の場合、特に最初のケースでパフォーマンスがいくらか失われると思います。ただし、非常にトラフィックの多いWebサイトを運営していないのであれば、大したことではありません。

私はstackoverflowに登録したばかりで、受け入れられた答えにまだコメントできませんが、今日はHTTPプロトコルを介してファイルを提供するためにsendfile()を実際に使用する簡単なNode.jsスクリプトを作成しました。 (受け入れられた回答がむき出しのTCPプロトコルのみを使用してファイルを送信する既存の例では、HTTPの例を見つけることができなかったため、自分で作成しました。)

だから誰かがこれを役に立つと思うかもしれないと思った。 sendfile()OS呼び出しを介してファイルを提供することは、「ユーザーランド」を介してデータをコピーする場合よりも必ずしも高速ではありませんが、CPUとRAMを使用しないため、より多くの接続を処理できます古典的な方法よりも。

リンク: https://Gist.github.com/1350901

11
youurayy

SO言っていることを正確に説明した投稿(php + socket.io + node)

Socket.ioを使用してsomehost:8000にノードサーバーを配置し、socket.ioクライアントコードをタグにスラップすると、最小限の作業で、既存のアプリを大量の作業なしでsocket.io(リアルタイムベビー)でロックできます。

Nodeは唯一のバックエンドサーバーになりますが、nodeはその名前に応じてノードになることを好みます。しばらく前に、Ryan DahlがPHP Usersのグループに行った講演をチェックしました。彼は、いくつかのノードプロセスが作業を行い、互いに会話するというビジョンに関連する名前ノードについて言及しました。

7
Richard Holland

最近のLAMP対MEAN。直接の比較については、 http://tamas.io/what-is-the-mean-stack を参照してください。

もちろん、M、E、およびAは多少可変です。たとえば、最近の koa は(E)xpressを置き換える場合があります。

ただし、ApacheをNode.jsに置き換えるだけでは、Webスタックを最新化するのにおそらく適切な方法ではありません。

2
Wolfgang Kuehn