我tokio_core::net::TcpListener创建了一个,然后调用incoming方法以获取传入连接流。然后,我for_each在该流上使用该方法将其变为将来,并在事件循环上运行将来。一旦执行此操作,以后是否有任何方法可以解除与端口的绑定?
如果不是,Tokio中是否还有其他API可用于创建可以关闭的TCP服务器?
简而言之,您需要删除返回的TcpListener/ 。Futurefor_each
你可以:
Future为包含应用程序状态其余部分的某个结构编写一个实现。Future::poll然后,结构的实现会poll保存所有包含的状态,如果您想提前退出,Future则返回。如果将包含的内容包装起来以在其自己的任务中运行,Async::Ready可能会提高性能。Futureoneshot::spawn
您的结构将包含一个Option<SpawnHandle<(), ...>>. 如果您想停止收听,只需将其设置为None。
incoming通过检查某些“全局”( Arc<AtomicBool>) 标志是否继续侦听来过滤流Stream::take_whilefor_each是否继续侦听并返回错误(这会停止循环for_each)后两种方法仅在看到/处理传入连接后停止,因此它们仅在繁忙的环境中工作。
这是我最近发现的另一个选择。
您基本上需要删除TcpListener/ for_eachfuture 才能停止收听。由于它永远不会自行完成,只需oneshot::Receiver<()>使用 将其与您控制的另一个 future(例如 a )结合起来select()。如果侦听器完成(从不)或 oneshot 收到一个值(您可以通过向另一端发送某些内容来触发该值),则返回的 future 将完成。
对于需要关闭多个事物的更复杂的程序,还有一个具有一个和多个s 的watch通道。SenderReceiver<()>
还有一些建议可以让期货箱本身变得更容易。
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |