#3057·hyper

特性: 考虑将协议实现分割为自己的 crate

作者: notgull创建于 2022年11月17日更新于 2026年9月14日
标签C-featureB-rfc

** 您的特性请求与问题有关吗 ? 请说明。 **

Hyper是我最喜欢的Rust盒之一;然而,我有一个问题,我也许应该在1.0放出过程中早点提出。 虽然它是一个神奇的箱子,具有岩石固态的HTTP执行,但唯一的问题是,为了访问HTTP执行,你需要使用Hyper提供的API.

如果有一个单独的箱子,可以进入`Hyper-protocol',这样就可以访问协议位。 这将使其他用户能够使用这个箱子,在 " Hyper " 协议执行之上建立替代API。

说明你想要的解决方案

将有一个 " 高压protocol " 的箱子,在不涉及任何I/O的情况下提供API。 这意味着没有同步'、没有阻塞、没有读取'或写出';只有函数/结构可以写入或读出记忆缓冲器。 Hyper'本身随后将建立这个API,以提供其目前的API。

这种办法有若干优点:

  • 所产生的箱子比较容易测试。 由于您正在测试协议而不是I/O比特,分支空间会显著收缩,使得测试覆盖范围能够覆盖更多区域. *没有I/O比特,更容易对协议代码进行推理,并确保其正确.
  • HTTP协议的执行可以被其他箱子再用. 例如, " ureq " 和 " hring " 等箱提供了自己的HTTP执行。 为了减少开源社区整体完成的工作量,最好让他们都只使用一个HTTP执行.

欲了解更多信息,请参看本网址

** 说明你考虑过的备选办法**

虽然现状没有问题,但这只是意味着其他箱子必须提供自己的HTTP执行. 减少其他实施的数目将减少Rust社区需要开展的工作量。

** 其他情况**

欲了解更多关于Sans-I/O思想整体的信息,请参见此网站. 这主要适用于Python,但我想对于Rust来说也是有道理的.

关于成功的故事,见[x11rb-protocol'] (https://crates.io/crates/x11rb-protocol)箱子,我最近帮助从x11rb'中分离出来。 这样,x11rb'就可以使用同步码,而我自己的箱子breadx'可以使用Aync码,通过同样的X11协议执行来减少工作。

我绝对愿意帮助解决这个问题.