20分钟用 Rust 写一个 MVP 聊天服务器
今天 @吴翱翔 在飞书直播为我们展示了如何基于 tokio
来实现简单的聊天服务器,实现的功能有:
- 通过 websocket 协议来传输文本式的指令
- 通过
tokio::sync::boardcast
来实现多生产者多消费者消息队列,以使单个用户发送的消息可以传播给当前在线的用户 - 在应用层面通过心跳超时检测来回收资源。Up 主特别指出不使用 TCP 的
close
来检测断连的原因:因为在当前版本 TCP 连接中断并不会发送消息给正在等待信号的消息循环,使得这部分的资源会被一直占用且无法回收,造成资源的浪费以及被 DDoS 攻击轰炸的风险。
Up主在直播后的总结:
关于聊天应用还有 阅后即焚、敏感文字识别、消息撤回、私密聊天等等功能可以做的,我这也只是抛砖引玉,只完成了一个公共聊天室的简单功能。重点还是要理解协程之间消息队列、生产着消费者模型这些,但也看到了Rust快速快发后端应用的潜力
源码: https://github.com/pymongo/chat_server
Python 之父 Guido 对其它编程语言的看法
其中,关于 Rust 他如此评价[^1]:
Rust 在一个特定的领域真正改进了 C ,它使绕过编译器的检查变得更加困难。当然,它以一种近乎完美的方式解决了内存分配问题。
[^1]:消息来源:https://zhuanlan.zhihu.com/p/374942737