Rust

时间:2018-11-28 16:18:20

标签: asynchronous rust connection pool rust-tokio

我有一个Tokio TCP后端应用程序,该应用程序在收到请求后,简要地从Redis中读取内容,将内容写入PostgreSQL,通过HTTP上传内容,将内容发送到RabbitMQ等。处理每个请求需要很多时间时间,因此将为每个请求创建一个单独的任务。由于在异步模型中无法共享连接,因此需要一些连接池。目前,在每个请求上都建立了新的连接,这非常繁琐。

我一直在寻找Rust中的异步连接池实现,但没有找到最新的。

我想听听一些有关如何自己实施的建议。

我想出的唯一主意是:

  1. 使用内部连接集合来实现Stream/Sink对象。这是LIFO还是FIFO无关紧要,因为连接是相同的。在应用程序启动时,将分配N个连接。
  2. 现在我不确定是否可以在任务之间共享这样的池,但是如果可能,任务将轮询流以获取连接实例(而不是建立自己的连接实例),使用它,然后放置回来。
  3. 如果没有可用的连接,则流可能会建立更多连接,或者要求任务挂起(取决于其配置)。
  4. 如果连接失败,它将被丢弃,并且该池现在包含N-1个连接,因此它可以决定在下一个请求上分配一个新的连接。

所以我有两个问题,我无法在任何地方找到正确的答案:

  1. 我必须/可以/应该以某种方式在任务之间共享流/接收池吗?无论如何,我在Shared的板条箱中看到了一些futures期货。

  2. tokio / futures教程中有一些令人沮丧的地方。例如。它没有解释如何通知最重要的任务,即如何实现神话般的最内在的未来,它本身并没有汇集任何东西,但仍然必须通知最上层的未来。

还是我的方法完全错误?我可以自己开始玩,但我强烈怀疑自己错过了一些东西,例如一键式解决方案。

0 个答案:

没有答案