我创建了一个包含基于Node.js的和基于Rocket.rs的 Web 服务器的存储库。
按照以下步骤操作:
- 通过
cargo run --release
启动 Rocket.rs 服务器。 - 通过
node server.js
启动 Node.js 服务器。 - 在 Chrome 中并排打开 http://localhost:8000/(Rocket)和 http://localhost:8090/(Node)。
- 打开开发者控制台,同时刷新这两个选项卡,并观察到 Node 标签页始终在 5ms 以下完成,而 Rocket 标签有时需要超过 300ms 才能完成:
我也观察到在 actix-web 中类似的事情,尽管程度较小:在那种情况下,只有在约 5 秒钟没有刷新选项卡时,我才会出现 ~300ms 的延迟。如果我一直刷新它,那么请求会在 5ms 以下完成。
有趣的是,如果我像这样通过curl进行测量,这个和这个,延迟似乎不会发生。两个服务器的延迟都大约为4毫秒。我注意到Rocket和actix-web没有在其响应中发送Keep-Alive头。如果我理解正确的话,这对于HTTP 1.1请求不应该有影响。
我正在使用安装了Ubuntu的WSL 2。Chrome在主机Windows上运行。
能否有人解释一下这里发生了什么?
更新:忘记提到我在使用夜间编译器构建火箭服务器(火箭v0.4.6似乎需要它)。切换到stable并直接从master分支构建后,延迟消失了。然而,actix-web的延迟仍然有点令人担忧,因为我在那个项目中使用了stable编译器。