2个版本

0.1.2 2024年3月1日
0.1.1 2024年2月29日

#27 in #async-networking

0BSD许可证

12KB
147

schmoozer

对可重试异步操作的一种简单抽象,例如建立TCP连接。


lib.rs:

schmoozer旨在用作一个异步(重连)连接器。它由两部分组成

  • 由需要运行可重试连接循环的应用程序/库实现的 Connector 特性。
  • [run()] 是一个函数,它接受一个 Connector 实现并尝试建立连接,在回调报告为可重试的失败时延迟并重试,并在成功建立连接后调用 [Connector::run()] 特性方法。

可能看似矛盾的是, [run()] 函数本身并不实际尝试建立任何连接 -- 它依赖于 Connector 特性来实现建立连接的方法。

连接器循环的整体“正确路径”流程是调用 connect() 方法。如果成功,调用 run() 方法,并传递新的连接。与连接相关的主要应用程序逻辑应从该方法调用。

连接器的主要目的是“失败路径”:如果 connect() 方法遇到失败,它可以选择向连接器循环发出信号,表明错误是“可重试的”,在这种情况下,将调用 retry_delay() 方法以确定连接器循环是否应该重试(并在返回执行重试指令之前实现延迟)。

同样,run() 方法返回其 Result<(), Self::Error> 被包装在 ControlFlow::Continue(_) 中,以表示连接器应该重新连接,而 ControlFlow::Break(_) 则表示发生了致命错误,连接循环应该终止。

依赖项

~0.3–8.5MB
~69K SLoC