Skip to content

与 quinn 相比 这个项目有什么独特的优势嘛? #461

Discussion options

You must be logged in to vote

首先,gm-quic 是从一开始就是采用异步 Rust 设计的,在这种设计下各模块能够做的更加精细、独立、解耦;quinn 一开始则是多线程的基础上做起来的,它内部的 drive 驱动可谓相当复杂,它提供的上层异步接口也像是个临时可用版本,非异步加上复杂的 drive 扫描驱动模式,也致使 quinn 性能不佳。

接着看模块设计,通过异步解耦,gm-quic 的结构定义、接口保留了大部分原汁原味的 RFC 中描述的味道,比如 ErrorKind 定义,没有额外增加自定义的错误,因为 RFC 已经定义的很周全了;再比如 stream 的状态转换,几乎保留了 RFC 中原汁原味的状态机风格,语义更加清晰。这些意味着更符合标准,更不容易出错。我们希望 RFC 上的每一个概念,都能在 gm-quic 的代码中有不偏不倚的体现,所以本项目对于熟悉 quic 协议、了解异步 Rust 的写法也有很高的学习价值。

然后,我们在对比测试各家 quic 实现时,发现 quinn 是相当不稳定的一个实现,失败率偏高,稳定性、性能均排名倒数。参考小红书刚开源的网关,就因此没使用 quinn。gm-quic 项目更新,功能也会更加完善。

再者,在应用层接口设计上,无论是客户端还是服务端的, gm-quic 都更语义化,更加易用。比如,对上层应用而言的 Stream 的 API 则直接是实现了标准的 AsyncRead、AsyncWrite trait,保持着良好的接口通用性。在 Rust 常见的套娃结构或者深层次关联类型 trait 绑定上,与接口的方便理解上,有着良好的平衡。

最后,gm-qu…

Replies: 2 comments 2 replies

Comment options

You must be logged in to vote
1 reply
@matheus23
Comment options

Answer selected by huster-zhangpeng
Comment options

You must be logged in to vote
1 reply
@matheus23
Comment options

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
4 participants