繁体   English   中英

解决服务器端长轮询的最佳方法

[英]Best approach to tackle long polling in server side

我有一个用例,我需要每 1 秒轮询一次 API(基本上是无限的 while 循环)。 轮询将由用户通过外部系统动态发起。 这意味着可以同时运行多个轮询。 当 API 返回 400 时,轮询将完成。无论如何,我当前的实现看起来像:

  1. 在heroku上部署的Flask APP。
  2. Flask APP 有一个端点,外部系统调用它来开始轮询。
  3. 该烧瓶端点会将消息添加到队列中,一旦工作人员收到它,它将开始轮询。 我正在使用 Heroku Redis to Go 插件。 在引擎盖下,它使用 python-rq 和 redis。

问题是当某个轮询进程持续很长时间时,另一个进程只是坐在队列中。 我希望能够在并发进程中进行所有轮询。

解决这个问题的最佳方法是什么? 解雇多个工人?

如果可能有超过 100 个并发进程怎么办。

您可以实现一个“加权”/优先级队列。 可能有多种实现方式,但我想到的最简单的例子是使用最小或最大堆。

您应该跟踪每个进程的队列中有多少事件,随着一个进程的事件数量的增加,新插入事件的权重应该减少。 每次处理一个事件时,您都会开始处理以下权重最大的事件。

PS 更多的工人也会加快工作速度。

暂无
暂无

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

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