陈天 · Rust 编程第一课
陈天
Tubi TV 研发副总裁
23195 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
基础篇 (21讲)
陈天 · Rust 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

41|阶段实操(6):构建一个简单的KV server-异步处理

TcpStream 和 TlsStream
AsyncRead + AsyncWrite
测试
创建
Sink
Stream
测试
创建
Sink
Stream
ProstStream
TLS 的支持
实现 Stream 和 Sink 的简单数据结构
ProstStream 数据结构
ProstClientStream
ProstServerStream
异步处理
Service 数据结构
CommandService trait 和 Storage trait
客户端和服务器间交互的 protobuf
思考题
进阶篇
KV server 基础功能
陈天
阶段实操(6):构建一个简单的KV server-异步处理

该思维导图由 AI 生成,仅供参考

你好,我是陈天。
到目前为止,我们已经一起完成了一个相对完善的 KV server。还记得是怎么一步步构建这个服务的么?
基础篇学完,我们搭好了 KV server 的基础功能(21 讲22 讲),构造了客户端和服务器间交互的 protobuf,然后设计了 CommandService trait 和 Storage trait,分别处理客户端命令和存储。
在进阶篇掌握了 trait 的实战使用技巧之后,(26 讲)我们进一步构造了 Service 数据结构,接收 CommandRequest,根据其类型调用相应的 CommandService 处理,并做合适的事件通知,最后返回 CommandResponse。
但所有这一切都发生在同步的世界:不管数据是怎么获得的,数据已经在那里,我们需要做的就是把一种数据类型转换成另一种数据类型的运算而已。
之后我们涉足网络的世界。(36 讲)为 KV server 构造了自己的 frame:一个包含长度和是否压缩的信息的 4 字节的头,以及实际的 payload;还设计了一个 FrameCoder 来对 frame 进行封包和拆包,这为接下来构造网络接口打下了坚实的基础。考虑到网络安全,(37 讲)我们提供了 TLS 的支持。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何构建一个简单的KV server,并重点讲解了异步处理的实现。作者通过实际代码和详细解释,帮助读者深入了解了如何构建一个简单的KV server,并实现了异步处理的技术特点。文章首先回顾了之前构建KV server的过程,然后介绍了在进阶篇中掌握了trait的实战使用技巧,并进一步构造了Service数据结构,处理客户端命令和存储。接着,文章讲解了在涉足网络世界时提供了TLS的支持,并开始处理异步。作者详细介绍了如何构建ProstStream结构,让其实现Stream和Sink这两个trait,并对其进行了具体的实现。最后,文章总结了实现Stream的poll_next()方法的具体步骤,以及在异步处理中需要注意的细节。整体来说,本文通过实际代码和详细解释,帮助读者深入了解了如何构建一个简单的KV server,并实现了异步处理的技术特点。文章内容丰富,对于想要深入了解KV server构建和异步处理的读者来说是一篇很有价值的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《陈天 · Rust 编程第一课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 罗杰
    前两节感觉理解有些吃力了,今天的实操突然又让我觉得好像也没那么难了。老师实操阶段的代码真是赏心悦目。我要动手好好理解一下。

    作者回复: 👍

    2021-12-03
    2
    4
  • 罗同学
    利用异步io 重构后 process ,性能会不会有一定提升呢?

    作者回复: 对于这个特定的例子,不会有显著提升,因为之前也已经是异步处理,只是接口并没有兼容 stream/sink。

    2021-12-03
    2
  • Geek_64affe
    尝试回答第一个问题:因为当poll返回的是Pending,会直接返回出去,如果使用局部变量,每次进到poll里面都会被重置,导致逻辑错误
    2022-01-18
    1
    4
  • 小可爱(`へ´*)ノ
    坚持✊
    2023-01-04归属地:四川
  • 啦啦啦啦啦啦啦
    为方便在 sink 和 stream 中对 stream 操作?因为是异步环境中使用,使用局部变量时会丢失数据吧
    2022-02-26
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部