【问题标题】:Are uwsgi processes stuck when using Comet(Long Polling)?使用 Comet(Long Polling) 时 uwsgi 进程是否卡住?
【发布时间】:2013-08-22 05:51:27
【问题描述】:

我相信 nginx 是基于事件的,因此只有 1 个工作人员可以处理多个请求,例如 100 个请求/秒。然后这些请求将被传递给 uwsgi 进行处理,然后一旦完成,它将结果推送回 nginx,nginx 会将结果推送给执行 http 请求的用户。

假设我的 uwsgi 只使用 1 个 worker(无线程),uwsgi 会一一处理这 100 个请求吗?所以它需要做 100 个进程来完成整个请求。 现在如果我打算使用长轮询来快速更新我的前端会发生什么How does facebook, gmail send the real time notification?

我相信它会迫使uwsgi处理单个请求(这是长轮询过程)并暂停所有其他请求,从而导致整个系统崩溃。

我对 uwsgi 的工作原理是否有任何误解,或者是否有其他解决方案可以实现长轮询?

谢谢

【问题讨论】:

  • 这是一个有趣的问题,但它的标题很糟糕。将其更改为如何,以吸引可以提供帮助的人的注意:“使用 Comet 时,uwsgi 进程是否保持空闲?”并且也许还会在标签中添加“彗星”。请注意,这个问题可能更适合serverfault.com
  • 感谢您的建议

标签: python nginx comet long-polling uwsgi


【解决方案1】:

您的分析是正确的,长轮询不适合多进程或多线程模式(就成本而言)。每个进程/线程可以管理一个请求。幸运的是 uWSGI 支持几十个 非阻塞/事件/基于微线程的技术(如 gevent 或较低级别的 greenlets),如果您的应用程序可以适应这种模式(这不是一项无脑任务,所以不要希望猴子补丁会成为够了)你会赢的。

除此之外,如果你喜欢/容忍基于回调的编程并且你不需要 uWSGI 特定的功能,我发现 Tornado 是解决问题的好方法。

【讨论】:

  • 我明白了,你建议直接运行tornado 还是在nginx 后面运行tornado?到目前为止我发现的是quora.com/Tornado-web-framework/…你同意吗?谢谢
  • 一般来说,永远不要运行直接暴露在公共网络上的应用服务器。所以是的,我同意这篇文章
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多