首页 > 解决方案 > “Hello world”Rust 网络服务器从 Chrome 测量而不是从 curl 测量时比 Node 慢

问题描述

我创建了一个存储库,其中包含基于 Node.js和基于Rocket.rs 的Web 服务器。

考虑以下步骤:

  1. 通过以下方式启动 Rocket.rs 服务器cargo run --release
  2. 通过以下方式启动 Node.js 服务器node server.js
  3. 在 Chrome 中并排打开 http://localhost:8000/ (Rocket) 和 http://localhost:8090/ (Node)。
  4. 在开发者控制台打开的情况下,我不断刷新两个选项卡并观察到 ​​Node 选项卡总是在 5 毫秒内完成,而 Rocket 选项卡有时需要超过 300 毫秒才能完成:

在此处输入图像描述

我在 actix-web 上也观察到了类似的事情,但程度较轻:在这种情况下,如果我没有刷新大约 5 秒的选项卡,我只会得到约 300 毫秒的延迟。如果我继续刷新它,那么请求会在 5 毫秒内完成。

有趣的是,如果我像thisthis 这样通过 curl 进行测量,似乎不会发生延迟。两台服务器都有大约 4 毫秒的延迟。

我注意到 Rocket 和 actix-web 不会在响应中发送 Keep-Alive 标头。如果我理解正确的话,这对于 HTTP 1.1 请求应该无关紧要。

我正在使用安装了 Ubuntu 的 WSL 2。Chrome 在主机 Windows 中运行。

有人可以解释一下这里发生了什么吗?

更新:忘了提到我正在使用夜间编译器来构建火箭服务器(Rocket v0.4.6 似乎需要它)。直接从主分支更改为稳定并构建消除了延迟。但是,actix-web 延迟仍然有点令人担忧,因为我使用了稳定的编译器。

标签: node.jsperformancerustlatencyrust-rocket

解决方案


全部从 windows 运行,在 node 中响应时间在 左右 2-4 ms,在 rocket 中1-2 ms。你的环境发生了一些奇怪的事情。

还尝试从 WSL 服务并获得相同的结果。

即使在 debug(rust) 上,它的平均花费+1ms也比在发布时要多,这可能是一些奇怪的浏览器问题。


推荐阅读