apache、node.js、nginx、tomcat谁能帮我捋一捋关系?

是一类东西,又不是一类东西。

首先他们都能创建 Web 服务器,但是他们关注的点不一样。

Tomcat 最好跟 Java 配合,Apache 通常跟 PHP 配合,但也不排除能跟 Node.js 配合反向代理。跟 Node.js 关系最好的还算是 Nginx。

当然你在你的服务器上直勾勾挂个 Node.js 监听 80 端口对外也不是不可以。但是通常真正线上(个人玩具除外)的做法是,Node.js 监听本地的某个端口,然后前面挂个 Nginx 监听 80 端口反向代理到 Node.js 上。

至于为什么要这么做,比如你有 3 台服务器,每个服务器上启一个 Node.js 作为集群的一个节点,然后再在前面挡一层负载均衡,反向代理到集群的 3 台服务器上。所以实际上不仅仅是 Node.js,这是一种语言无关的做法。

所以他们都能拿来做 Web 服务器,只不过关注的点不一样而已——Node.js 更倾向于业务逻辑。

偏要分类的话

apache和nginx算接近一类,node.js和tomcat算接近一类。

Apache就是静态网页服务器,就是将本地页面文件做一个网络映射,可以添加mod来扩展功能,例如php模块就扩展了基于php的CGI动态页面页面能力,代理模块就是成了代理服务器。

nginx同,不过更多主职于代理服务器。

tomcat就是一个Java Servlet容器,换个说法就是基于java的CGI动态页面服务器,静态页面只是一个附属功能。

node.js同样一个容器,换个说法就是基于JavaScript的CGI动态页面服务器,看上去静态页面不算是直接功能。

首先看下各个官网怎么解释自家产品

1. nginx

http://nginx.org/en

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.

2. apache

http://httpd.apache.org

The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows.

3. tomcat

http://tomcat.apache.org

The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.

4. node.js

https://nodejs.org/en

Node.js® is a JavaScript runtime built on Chromes V8 JavaScript engine.

从这里可以很清楚看出这几个的区别nginx和apache是server。tomcat是implementation。node.js是runtime。下一步解释这几个有什么区别。

这里的runtime实际上指的是runtime environment—运行时环境

runtime是指程序生命周期的一个时态,程序在运行过程中的时候为runtime。程序在编译过程中的时候为compiletime。

https://en.m.wikipedia.org/wiki/Program_lifecycle_phase

以前js的运行时环境是在浏览器里比如ie。chrome。firefox。safari等。现在又多出来了一个运行时环境node.js它提供了比如系统io、进程管理等原先运行时不开放的功能所以js能够实现很多以前并不能实现的功能。如express这种web application framework

https://en.m.wikipedia.org/wiki/Web_framework

但是使用node.js实现的应用并不一定都是网络应用,比如electron。

Electron is a framework for creating native applications with web technologies like JavaScript, HTML, and CSS.

https://electron.atom.io

这里我特指开发桌面程序

然后说到tomcat身上。tomcat是一个开源实现。它实现了什么呢?servlet等。servlet又是什么呢?简单来说是替代了cgi它替换了提取用户提交数据之后再调用java类内接口的过程。

最后说到apache和nginx上。他们可以说是一类东西都是server。但是apache专攻http。nginx可以说tcp都有涉猎。nginx很轻量级。而且对于并发处理特别擅长。

说到这应该对上面几个有了一个粗略的认识。上面如果有些错的请在评论告诉我哟。如果觉得写得很骚请点个赞。

以上。

1. 你已经回答了,一个是 runtime,其它的只是 server,rumtime 可以做很多 server 做不到的事情;2. 额,第一点基本上已经回答了。Node.js 的 API 只支持 JavaScript 的语法,其它火星文它识别不了,不过以后你可以试试用 C++ 写个模块,然后用 js 来调用,有点意思3. 额,由于 Node.js 自身的限制,它只能以“服务器”的姿态出现在众人面前,你的原意应该是想问 Node.js 除了用来做网站后台还可以做什么吧?今天 Node.js 有好多好多表现很优秀的实践,有人用它来做中间件,有人用它来做云计算代理,有人用它来做嵌入式应用。。。自己多关注时事吧

Apache,nginx应该是一类,web服务器。

tomcat是java的应用服务器。

nodejs是js的应用服务器。

如果php跑Apache,就像java跟tomcat,js跟nodejs

tomcat,nodejs,本身可以提供web服务,这点不像php,需要Apache或者nginx

Nginx是web服务器,又比较特殊,它后面还能接其他服务器,后面可以接tomcat,Apache,nodejs,也可以接php-fpm跑php

nodejs跑js,有2种,一是用js编后端,就跟java,php一样。二是做前端工具。最常见的还是后者。