长轮询选项:Nginx,PHP,Node.js

我正在devise一个长轮询应用程序,可以很快地向很大数量的用户发送小的更改。 该应用程序将与运行相当标准的CMS网站串联运行。 他们都将在一台服务器上运行,并开始数据库。

我来自一个LAMP环境,我绝对是一个开发人员,而不是一个系统pipe理员。 这就是说,我不害怕尝试一些新的东西。

我花了一天时间研究我的select,我希望人们可以回答一些问题,并给我一些build议。

我已经缩小到这些:

A. Apache and php for the website, Node.js for the app B. Nginx and php for both the website and app C. Nginx and php for website, Nginx and Node.js for the app 

所以问题:

  1. Nginx如何处理PHP的非multithreading;)。 PHP会certificateApache是​​否具有长时间轮询的瓶颈?
  2. 我听说它build议我使用nginx作为Apache和Node.js前面的反向代理,这是比nginx更好的解决scheme吗? 如果是这样,为什么?
  3. 你使用了哪个选项?

请记住,简单的设置可能是一个因素,我相当适应Apache,但我只使用节点,我从来没有安装Nginx。

如果有人需要,我会很乐意提供澄清。

我会使用选项C:并建议一个选项D:

选项D:

  • 通过HAProxy保持负载均衡(LB)
  • Nginx的静态和PHP脚本,使用PHP-FPM,APC和Redis进行缓存
  • Node.js(和其他节点模块)用于动态的实时内容

我们目前使用来自LAMP背景的选项D的前两个部分,并且目前正在实施Node.js来为我们的一些(系统赋税)实时应用程序提供服务。 HAProxy正是这样做的:代理流量到所有我的后端服务器,而不是让Nginx这样做。 原因是,我们有许多后端HTTP / TCP /其他服务器,我们需要冗余和自动故障转移到这些服务器。 LB实施简单,运作良好。

到目前为止,效果极佳。 就个人而言,由于缺乏文档,节点学习曲线迄今为止是困难的,但是在那里有一个非常有活力的社区。

希望这可以帮助。

我个人只会使用Node.js. 您可以将新信息推送给所有可用的客户,而不是长时间的投票。 Node.JS在提供实时内容时非常快速,并且能够在一个包中完成所有工作。 另外,客户端和服务器端用JavaScript编写,使开发,调试和交付变得更加容易。 作为开发者,你可以看到这个好处。

这里是一个使用Node.js和模块express,jade和NowJS的应用程序的例子。 当然,这也可以与运行在Apache和Node.JS服务动态内容的CMS组合使用。 与Nginx或节点脚本充当反向代理在这个脚本和Apache之前。

简单的聊天应用程序

server.js

 var express = require('express') , app = express.createserver() , nowjs = require('now') /* configure express server */ //... app.get('/', function(req, res){ res.render('chat') }) var everyone = nowjs.initialize(app) // server scoped function called by single client everyone.now.distributeMsg = function(msg){ // Client scoped function of every connected client this.now.receiveMsg(msg) } app.listen(3000) 

chat.jade

 !!! html head script(type='text/javascript', src='/nowjs/now.js') body #log input#entry(type='text') input#submit(type='button') script $(function(){ $('#submit').click(function(){ now.distributeMsg($('#entry').val()) }) now.receiveMsg = function(msg){ $('#log').append('<div>' + msg + '</div>') } }) 

是的,它真的很简单,不需要更多的代码行来把它变成一个全功能的聊天应用程序。 事实上,你的标记和CSS将比应用程序代码占用更多的行。 惊人!