一个针对Rust的同步HTTP客户端?

7
我正在寻找一款低开销的 HTTP 客户端,用于在 Rust 中创建 AWS Lambda 的自定义运行时。我发现所有的实现(包括 AWS 官方运行时)都基于 hyper/tokio,但我不想要这种额外的开销和二进制负担。
你知道有哪些客户端吗?为什么所有框架都基于 tokio?
谢谢。

“开销”和“增加的二进制负担”——你基于什么来做出这个说法?“开销”是什么意思?与根本没有HTTP的代码相比,“增加的二进制负担”是什么? - Shepmaster
1
我的意思是,通过添加整个hyper/tokio依赖项,生成的二进制文件会增加几MB。Rust运行时在AWS Lambda上的部署方式意味着每个函数都需要存储这几MB。关于开销方面,每个AWS Lambda容器一次只处理一个请求(如果我对此有误,请纠正我),因此整个异步系统似乎有些过度设计了... - MindTailor
这是针对发布版本的吗? - Shepmaster
由于当前形式的问题似乎不属于主题,您可能希望查看其他资源。更开放的问题和讨论欢迎在Rust-Beginners IRC频道Rust subredditRust用户论坛上进行。还有一个Rust IRC频道列表在社区页面上。 - Shepmaster
2
很抱歉,这仍然被视为请求外部资源。由于这些问题更难以更新并倾向于吸引选项和垃圾邮件,它们不适合在Stack Overflow上提问。幸运的是,正如Shepmaster所说,还有许多其他地方可以询问此类问题。 - E net4
显示剩余2条评论
1个回答

9
“所有框架都基于Tokio的原因是什么?”
“Tokio” crate由许多人贡献并维护。由于它被良好地开发和维护,将新的crate放在这个基础之上是一个明智的想法。这就是为什么许多库依赖于“Tokio”及其变体/相关crate的原因。
由于“Tokio”基于最小的子crate,如“tokio-tcp”,“tokio-codec”,“tokio-io”,“tokio-executor”等,因此这些crate可以单独导入,因此您的发布大小将相对较小。
如果您坚持不使用任何“Tokio”依赖项,仍然有一些选择,但它们将由相对较少的贡献者开发和维护。
以下是一些不使用Tokio的HTTP客户端选项:
  • Ureq(一个轻量级的http客户端库,使用rust编写)
  • Minreq(一个非常简单,易于使用的http客户端库,使用rust编写)
  • cHttp(一个用C语言编写的http客户端库)
  • easy-http-request(你可以尝试在其之上构建http客户端)
  • cabot(一个使用Rust编写的高度可定制的HTTP代理和路由器)

除这些替代方案外,还有很多选择,但我认为我会导入最少的与tokio相关的crate,并在它们之上实现我的应用程序。


这个问题似乎不是因为离题而关闭的?我只是想提出一些建议,如果可以的话尝试帮助。 - Akiner Alkan
非常感谢您抽出时间回答我的问题。我会从那里开始! - MindTailor
2
您可能还希望阅读 是否应该对与主题无关的问题提供建议?。我们不禁止通过评论来帮助提问者,但回答则与本站的目标相悖。 - E net4
好的,那好吧。下次我可以尝试从评论区帮忙。 - Akiner Alkan
谢谢 @AkinerAlkan。看来,Stack Overflow社区的这个负面回应让你不再提供其他答案了。这太糟糕了,但我不怪你,因为长期以来,由于其所有规则,它一直是一个不友好的地方。我感谢你在回答中付出的努力,并发现它很有帮助。 - Eloff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接