使用Comet(长轮询)时uwsgi进程是否卡住?

时间:2013-08-20 08:41:53

标签: python nginx comet long-polling uwsgi

我认为nginx是基于事件的,所以对于1个单独的工作者,它可以接受多个请求,比如100个请求/秒。这些请求将被传递给uwsgi进行处理,然后一旦完成,它会将结果推回到nginx,nginx会将结果推送给执行http请求的用户。

假设我只为我的uwsgi使用1个工作者(没有线程),uwsgi将逐个处理这100个请求吗?因此,它需要完成100个进程才能完成整个请求。 现在如果我计划使用长轮询来快速更新我的前端会发生什么How does facebook, gmail send the real time notification?

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

我是否对uwsgi如何工作有误解,或者是否有任何其他解决方案来实施长轮询?

谢谢

1 个答案:

答案 0 :(得分:1)

您的分析是正确的,长轮询不适合多进程或多线程模式(在成本方面)。每个进程/线程都可以管理单个请求。幸运的是,uWSGI支持数十种 如果你的应用程序可以适应这种模式(这不是一个无脑任务,所以不要希望猴子修补将是非阻塞/即兴/基于微线程的技术(如gevent或低级greenlet)你会赢的。

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