3.教程:使用async std编写聊天服务(3.7 完全关闭)
3.7 完全关闭 当前实现的一个问题是它不能处理正常关闭。 如果我们出于某种原因而中断了accept循环,那么所有的正运行任务都将被丢弃。更正确的关机顺序是: 不再接受新的客户 把未处理完的消息正常处理完 (这聊天服务中主要是指把未发送给客户端的消息正常发送出去) 然后开始退出程序 在基于通道的体系结构中,是很容易完全关闭的,尽管这样操作可能看起来是不可思议的。因为在Rust中,通道的接收端在所有发送端都drop(释放)后就会关闭了。 也就是说,一旦通道的所有发送方都被drop(释放),通道的接收端就被关闭。在async_std中,这转换为两个规则: 确保通道形成非循环(不要互相等待形成死
用户评论