gpt4 book ai didi

rust - 是否可以在 Tokio 中关闭 TcpListener?

转载 作者:行者123 更新时间:2023-11-29 07:50:07 29 4
gpt4 key购买 nike

我创建了一个 tokio_core::net::TcpListener,然后调用 incoming 方法来获取传入连接流。然后,我对该流使用 for_each 方法将其转换为 future 并在事件循环中运行 future 。一旦我这样做了,以后有什么办法可以从端口解除绑定(bind)吗?

如果没有,Tokio 中是否有任何其他 API 可用于创建可关闭的 TCP 服务器?

最佳答案

简而言之,您需要删除 TcpListener/Futurefor_each 返回.

你可以:

  • 写一个Future包含应用程序其余部分状态的某些结构的实现。 Future::poll然后为你的结构实现 poll所有包含 Future状态,并返回 Async::Ready如果你想早点退出。如果包含 Future 可能有助于提高性能s 包裹在 oneshot::spawn 中在他们自己的任务中运行。

    您的结构将包含一个 Option<SpawnHandle<(), ...>> .如果您想停止收听,只需将其设置为 None .

  • 过滤 incoming通过检查一些“全局”( Arc<AtomicBool> )标志是否继续使用 Stream::take_while 继续收听流
  • 在您的 for_each 末尾检查处理程序是否继续监听并返回错误(这会停止 for_each 循环)

后两种方法仅在看到/处理传入连接后才会停止,因此它们仅适用于繁忙的环境。

关于rust - 是否可以在 Tokio 中关闭 TcpListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48334079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com