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

Ric*_*ick 151 apache node.js

我使用常见的嫌疑人(Apache,MySQL和PHP)在CentOS上运行一个网站.自从这个网站最初推出以来,它已经发展了很多,现在我想用它做更好的事情 - 即实时通知.根据我的阅读,Apache处理这个问题很糟糕.我想知道我是否可以用Node.js替换Apache(因此代替" LAMP "它将"LNMP").

我试过在线搜索解决方案,但还没找到.如果我正确地解释了我读过的东西,似乎大多数人都说Node.js可以同时替换Apache和PHP.我有很多现有的PHP代码,所以我宁愿保留它.

如果它还不是很明显,我很困惑,可以使用一些启示.非常感谢!

sar*_*old 87

如果您准备在JavaScript中重写PHP,那么是的,Node.js可以替换您的Apache.

如果在服务器和客户端之间放置以反向代理模式运行的Apache或NGINX实例,则可以在Node.js上处理JavaScript中的一些请求,并在Apache托管的PHP中处理一些请求,直到您可以完全替换所有PHP使用JavaScript代码.这可能是一个快乐的媒介:你的WebSockets是否在Node.js中工作,在Apache + PHP中更平凡的工作.

  • @Rick,我非常接近删除自己的答案; [Node可以使用`sendfile`](http://blog.std.in/2010/09/09/using-sendfile-with-nodejs/),还有一个[FastCGI模块](https:// github .com/billywhizz/node-fastcgi-parser)支持也可以通过Node轻松地为PHP提供服务.至于nginx和Apache,我一直是线程或多进程服务器上异步式服务器的傻瓜:)但我发现Apache文档更容易查找和阅读.除非你需要扩展到惊人的数字,否则我会称之为个人偏好.:) (21认同)
  • @Rick在了解Node是什么以及它是如何工作之前,您不希望将生产资源迁移到Node.节点不是一个让事情变得更快的神奇药丸.事件驱动/异步范例并不新鲜,并且有理由说明为什么它不能用于所有事情.http://en.wikipedia.org/wiki/Asynchronous_I/O (3认同)
  • @ ohvind Skaar我同意.此外,对于大多数网站(例如Wordpress),真正的瓶颈是数据库而不是文件访问.而且,如果文件访问是一个问题,那么缓存始终是一个可行的解决方案.无论如何,对于真正的性能,PHP-APC是一个该死的廉价技巧. (2认同)

yoj*_*o87 26

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

Node.js本身是一个轻量级的低级框架,它使您能够相对快速地构建服务器端的东西和Web应用程序的实时部分,但Apache提供了更广泛的配置选项和"经典"的面向Web服务器的功能.

我想说除非你想用基于node.js的web应用程序框架(如express.js)替换PHP,否则你应该继续使用Apache(或者考虑如果遇到性能问题就迁移到Nginx).


you*_*ayy 11

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

我刚刚注册到stackoverflow,我还不能评论已接受的答案,但今天我创建了一个简单的Node.js脚本,它实际上使用sendfile()通过HTTP协议提供文件.(接受的答案链接到的现有示例仅使用裸TCP协议发送文件,我找不到HTTP的示例,所以我自己写了.)

所以我觉得有人可能觉得这很有用.通过sendfile()OS调用提供文件不一定比通过"用户域"复制数据更快,但它最终利用CPU和RAM更少,因此能够处理比传统方式更多的连接.

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

  • 虽然非常正确,但我仍然认为,如果你删除了apache,只执行你所描述的内容,它会运行得快,如果没有,比node.js更快.Apache做了许多人们看不到或者不太了解的事情,如果你将这些web服务器的所有功能都添加到node.js,那么它的运行速度和它们一样慢.可能是简单的例子,http://mynode.js/getfile?file =/etc/shadow (2认同)

Ric*_*and 7

以前的 SO帖子描述了我的说法(php + socket.io + node)

我认为你可以在somehost上建立一个节点服务器:8000使用socket.io并将socket.io客户端代码压缩成标签,并且只需很少的工作就可以使用socket.io(实时宝贝)摇动现有的应用程序而无需大量工作.

虽然节点可以是您唯一的后端服务器,但请记住该节点喜欢辜负它的名称并成为节点.我查看了Ryan Dahl给PHP用户组的一段时间的谈话,他提到了名称节点,该节点与几个节点进程的工作和相互交谈的愿景有关.