ant*_*r15 13 javascript node.js express socket.io nodejitsu
这个问题特别适用于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')
})
Run Code Online (Sandbox Code Playgroud)
我有一个简单的空白HTML页面,其中包含socket.io,它会定期发送perf
事件和时间,以便回调触发所需的时间.它仍然显示相同的事情:
请注意,条形长度表示时间量的平方根,而不是线性数量.
当我不使用socket.io时,我使用XHR对当前响应时间进行类似的测量,结果非常相似,有很多低延迟响应(尽管基线比websockets高,如预期的那样),偶尔也有一些尖峰似乎堆积如山.
奇怪的是,如果你在多个浏览器窗口和不同的浏览器中打开它,不同浏览器之间似乎存在相关性(并且它在某些服务器上完全不存在或频率显着降低),这似乎意味着它是服务器端现象.但是,某些浏览器会出现延迟峰值而其他浏览器不会出现延迟峰值,并且同一会话中的两个Chrome窗口看起来几乎完全相同,这表明它是本地发生的(每台计算机或每个浏览器,网络)明智的).
从左到右:Chrome Incognito,Chrome(常规),Firefox,Chrome(常规)
无论如何,这让我困惑了几个月,我真的很想了解是什么导致它以及如何解决它.
小智 0
我知道这可能听起来很奇怪,但您是否认为这不是节点的问题,而是操作系统设置的问题。您是否检查过文件句柄以及操作系统向套接字显示的连接数?您是否还确保操作系统中的套接字超时足够低?我在其他代码中也遇到过类似的听起来性能问题,结果是操作系统而不是代码。还要检查包并查看套接字上允许打开的连接的内容。我没有查看节点代码,但在 java 中的 http 客户端库中遇到了类似的问题。应用程序刚刚备份,这只是连接数量的配置问题。
归档时间: |
|
查看次数: |
3525 次 |
最近记录: |