繁体   English   中英

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

[英]Long Polling Options: Nginx, PHP, Node.js

我正在设计一个长时间轮询的应用程序,以非常快的速度向可能的大量用户广播较小的更改。 该应用程序将与运行相当标准的cms的网站一起运行。 它们都将在一台服务器上运行,并且首先数据库也将运行。

我非常来自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的非多线程性;)。 PHP是否会证明与Apache进行长期轮询一样多的瓶颈?
  2. 我听说它建议我在Apache和Node.js之前使用nginx作为反向代理,这是否比nginx更好的解决方案? 如果是这样,为什么?
  3. 您使用过/建议使用哪个选项?

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

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

我将使用选项C:并建议选项D:

选项D:

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

当前,我们使用选项D的前两个部分(来自LAMP背景),并且当前正在实现Node.js,以为我们的某些(系统负担)实时应用提供服务。 HAProxy正是这样做的:代理到我所有后端服务器的流量,而不是让Nginx进行。 这样做的原因是,我们有许多后端HTTP / TCP /其他服务器,并且我们需要对这些服务器进行冗余和自动故障转移。 LB易于实现且效果很好。

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

希望这可以帮助。

我个人只会使用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)

贾德

!!!
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将比应用程序代码花费更多的行。 惊人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM