代码之家  ›  专栏  ›  技术社区  ›  hedgar2017

Rust中异步连接池的实现

  •  1
  • hedgar2017  · 技术社区  · 7 年前

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

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

    我想听听关于如何亲自实施的建议。

    我唯一想到的是:

    1. Stream/Sink 具有内部连接集合的对象。不管是后进先出还是后进先出,因为连接是相同的。在应用程序启动时,会分配N个连接。
    2. 现在我不确定是否可以在任务之间共享这样一个池,但如果可能的话,任务将轮询流以获取连接实例(而不是建立自己的连接实例),使用它,然后放回去。
    3. 如果一个连接失败,它将被丢弃,并且池现在包含N-1个连接,因此它可能决定在下一个请求中分配一个新的连接。

    1. 我必须/可以/应该以某种方式在任务之间共享流/汇池吗?不管怎样,我看到一些 Shared 未来 futures 机箱。

    2. 在东京期货的教程中有一些令人沮丧的地方。E、 它并没有解释我如何通知最重要的任务,也就是说,我如何实现神话般的最内在的未来,它本身并不汇集任何东西,但仍然必须通知最上层的未来。

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

    0 回复  |  直到 7 年前