4

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

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

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

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

谢谢你

4

1 回答 1

1

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

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

于 2013-08-20T11:09:50.890 回答