第 20 章 异步编程(2)
吉姆•布兰迪
20.2 异步客户端与服务器
现在,我们要把这些已讨论过的关键思想组合成一个真正可用的程序。在很大程度上,异步应用程序和普通的多线程应用程序非常相似,但在某些需要紧凑而且富有表现力的代码的场合,异步编程可以大显身手。
本节的示例是聊天服务器和客户端。真正的聊天系统是很复杂的,涉及从安全、重新连接到隐私和内部审核的各种问题,但我们已将此系统缩减为一组非常基础的特性,来把注意力聚焦于少数我们感兴趣的要点上。
特别是,我们希望能好好处理背压。也就是说,即使一个客户端的网络连接速度较慢或完全断开连接,也绝不能影响其他客户端按照自己的节奏交换消息。由于“龟速”客户端不应该让服务器花费无限的内存来保存其不断增长的积压消息,因此我们的服务器应该丢弃那些发给掉队客户端的消息,但也有义务提醒他们其信息流不完整。(一个真正的聊天服务器会将消息记录到磁盘并允许客户端检索他们错过的消息,但这里不考虑那样做。)
使用命令 cargo new --lib async-chat 启动项目,并将以下文本放入 async-chat/Cargo.toml 中:
我们依赖于 4 个 crate。
async-std crate 是本章中一直在用的异步 I/O 基础构件和实用工具的集合。
tokio crate 是类似于 async-std crate 的另一个异步基础构件集合,它也是最古老且最成熟的 crate 之一。tokio crate 应用广泛,设计和实现的标准都很高,但使用时需要比 async-std crate 更加小心。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文深入探讨了异步客户端与服务器的实现,强调了异步编程在特定场景下的优势,并与多线程应用程序进行了比较。通过聊天服务器和客户端的示例,讨论了处理背压的重要性,以及如何应对“龟速”客户端对服务器的影响。文章还介绍了项目的整体结构和布局,以及依赖的 4 个 crate。在讨论了 Error 类型与 Result 类型以及协议的定义后,文章重点介绍了获取用户输入的异步流。通过清晰的代码示例和说明,读者可以快速了解异步编程的实际应用和相关技术特点。文章还介绍了发送数据包和接收数据包的实现,强调了异步流的重要性。整体而言,本文为读者提供了深入理解异步编程的实用指南。文章内容涵盖了异步编程的基本概念、实际应用和技术细节,对于想要深入了解异步编程的读者来说,是一篇具有实际指导意义的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论