我可以用 Node.js 替换 Apache 吗?

我有一个在 CentOS 上运行的网站,使用通常的方法(Apache、 MySQL 和 PHP)。自从这个网站最初发布以来,它已经发生了很大的变化,现在我想用它做一些更有趣的事情ーー即实时通知。据我所知,阿帕奇处理得很糟糕。我想知道是否可以用 Node.js 代替 Apache (所以不用“ 台灯”,而用“ LNMP”)。

我试过在网上搜索解决方案,但没有找到。如果我正确地解释了我所读到的内容,那么似乎大多数人都认为 Node.js 可以同时替代 Apache 和 PHP。不过,我有很多现有的 PHP 代码,所以我宁愿保留它。

如果这还不够明显,我很困惑,可能需要一些启发。非常感谢!

66050 次浏览

如果您准备用 JavaScript 重写 PHP,那么 Node.js 可以替代 Apache。

如果在服务器和客户端之间放置一个以反向代理模式运行的 Apache 或 NGINX 实例,就可以在 Node.js 上处理一些 JavaScript 请求,在 Apache 托管的 PHP 中处理一些请求,直到完全用 JavaScript 代码替换所有 PHP。这可能是一个令人满意的媒介: 在 Node.js 中完成 WebSocket 工作,在 Apache + PHP 中完成更普通的工作。

由于 Node.js 的事件/非阻塞架构,它可能比 Apache 更快,但是您可能在寻找替代 Apache 某些功能的模块/库时遇到问题。

Js 本身是一个轻量级的低级框架,它使你能够相对快速地构建服务器端的东西和 Web 应用的实时部分,但是 Apache 提供了更广泛的配置选项和“经典的”面向 Web 服务器的特性。

我想说的是,除非你想用 node.js 这样的基于 web 应用程序框架(比如 Express.js)替换 PHP,否则你应该继续使用 Apache (或者考虑一下如果你有性能问题的话迁移到 Nginx)。

前面的 SO 文章描述了 IM 所说的内容(php + socket.io + node)

我认为你可以在主机上安装一个节点服务器: 8000和 socket.io,然后把 socket.io 客户端代码嵌入到标签中,用最小的工作量就可以让你现有的应用程序在没有大量工作的情况下使用 socket.io (实时宝贝)。

虽然 node 可以是您唯一的后端服务器,但是请记住,node 喜欢名副其实地成为一个节点。我查看了 Ryan Dahl 前段时间给 PHP 用户小组的一个演讲,他提到了与多个节点进程进行工作和相互交谈的愿景相关的名称节点。

我相信 Node.js 是 Web 服务的未来,但是如果你有很多现有的 PHP 代码,Apache/MySQL 是你最好的选择。可以将 Apache 配置为对 Node.js 的代理请求,或者 Node.js 可以将代理请求配置为对 Apache 的代理请求,但是我相信在这两种情况下都会损失一些性能,特别是在第一种情况下。如果你没有一个非常高的流量网站运行没什么大不了的。

我刚刚注册了 stackoverflow,现在还不能对接受的答案进行评论,但是今天我创建了一个简单的 Node.js 脚本,它实际上使用 sendfile ()通过 HTTP 协议为文件提供服务。(现有的例子表明,接受的答案链接到只使用裸 TCP 协议发送文件,我无法找到一个 HTTP 示例,所以我自己编写了它。)

所以我想也许有人会觉得这个有用。通过 sendfile ()操作系统调用提供文件并不一定比通过“用户地”复制数据更快,但它最终使用的 CPU 和 RAM 更少,因此能够处理比传统方式更多的连接。

链接: https://gist.github.com/1350901

它的灯光与平均现在。一个直接的比较见 http://tamas.io/what-is-the-mean-stack

当然 M,E 和 A 是有些变化的。例如,最近的 可儿可能会取代(E) xpress。

然而,仅仅用 Node.js 代替 Apache 可能不是现代化 Web 堆栈的正确方法。