2012-01-12 55 views
8

我正在设计一个长轮询应用程序,可以很快地向很大数量的用户广播小的更改。该应用程序将与运行相当标准的CMS的网站一起运行。他们都将在一台服务器上运行,并开始使用数据库。长轮询选项:Nginx,PHP,Node.js

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

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

我已经把范围缩小到这些:

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的非多threadingness)。 PHP会证明Apache有多长时间轮询的瓶颈?
  2. 我听说它建议我使用nginx作为Apache和Node.js前面的反向代理,这是比nginx更好的解决方案吗?如果是这样,为什么?
  3. 你使用了哪个选项/会推荐?

请记住,设置的简易性可能是一个因素,我对Apache很满意,但我只使用Node,并且我从未安装过Nginx。

如果有人需要,我会很乐意提供说明。

+0

这可能是一个问题http://webmasters.stackexchange.com/... – DaveRandom 2012-01-12 17:19:58

+0

我认为它...我想这是更多的配置基础。 – thelastshadow 2012-01-12 17:21:04

回答

1

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

这是一个使用Node.js和模块express,jade和NowJS的应用程序示例。当然,这也可以用作与运行在apache上的CMS和为动态内容提供服务的Node.JS的组合。无论是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将比应用程序代码占用更多的行。惊人!

+1

我喜欢Node,当然我很乐意在其中构建应用程序。 – thelastshadow 2012-01-13 09:30:13

3

我会用选项C:和建议的选项d:

选项d:

  • KEEPALIVED与HAProxy的负载平衡(LB)
  • Nginx的静态和PHP脚本,使用PHP-FPM,APC和Redis的用于高速缓存
  • 的Node.js(和其他节点模块)为动态的,实时内容

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

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

希望这会有所帮助。