gpt4 book ai didi

javascript - NodeJS 的高延迟

转载 作者:IT老高 更新时间:2023-10-28 23:08:51 28 4
gpt4 key购买 nike

这个问题与 Nodejitsu 相关,但类似的效果似乎也发生在其他 VPS 上。我有一个使用 socket.io 的实时游戏,我注意到的一件事是服务器偶尔会在响应之前等待过多的时间。如果在该时间范围内发送了多个请求,它们的行为就好像它们都已排队并立即处理。我怀疑它与共享硬件上其他用户的存在模糊相关(就像任何 VPS 一样)。

无论如何,为了测试这一点(并确保它不是由于我的游戏代码造成的),我构建了一个最小的测试用例:

express = require('express')
http = require('http')

app = express()
server = http.Server(app)

io = require('socket.io').listen(server)

io.sockets.on('connection', function(sock){
sock.on('perf', function(data, cb){
cb([Date.now()]); //respond with the current time
})
})

app.get('/', function(req, res){
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Methods", "HEAD,GET,PUT,POST,DELETE")
res.header("Access-Control-Allow-Headers", "X-Requested-With")

res.end(JSON.stringify([Date.now().toString()])); //http equivalent of perf function
})

server.listen(process.env.PORT || 6655, function(){
console.log('listening now')
})

我有一个简单的带有 socket.io 的空白 HTML 页面,它会定期发送 perf 事件以及回调触发所需的时间。它仍然显示相同的内容:

graph showing lag spike

请注意,条形长度表示时间量的平方根,而不是线性量。

当我不依赖 socket.io 时,我使用 XHR 对当前响应时间进行类似的测量,结果非常相似,有很多低延迟响应(尽管基线比 websockets 高,正如预期的那样)以及一些似乎堆积起来的偶尔尖峰。

奇怪的是,如果您在多个浏览器窗口和不同浏览器中打开它,不同浏览器之间似乎存在相关性(事实上,它在某些服务器上完全不存在或明显不那么频繁),这似乎暗示这是服务器端现象。但是,某些浏览器会出现延迟峰值,而其他浏览器不会出现延迟峰值,并且同一 session 的两个 Chrome 窗口似乎几乎完全相同,这表明这是本地发生的事情(每台计算机,或每台浏览器,网络明智的)。

从左到右:Chrome Incognito、Chrome(常规)、Firefox、Chrome(常规)

charts on four windows

无论如何,这几个月来一直让我感到困惑,我真的很想了解导致它的原因以及如何解决它。

最佳答案

我假设您检查了是否有 cpu 或 ram 问题。

唯一可以以“令人惊讶”的方式减慢 Node 速度的是垃圾收集器 - 尝试使用 --trace* 运行您的 Node 以查看发生了什么。 (参见 node --v8-options。)

我个人认为你不会从中发现任何东西,因为 - 这只是我的感觉 - 问题出在其他地方。

有了 500 毫秒的完美延迟,我假设您有数据包丢失。您可以检查 ifconfig 是否是一般问题,然后 tcpdump 数据包并查看它们是否重新传输。

关于javascript - NodeJS 的高延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246912/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com