小编ant*_*r15的帖子

NodeJS的高延迟

这个问题特别适用于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(常规)

四个窗口上的图表

无论如何,这让我困惑了几个月,我真的很想了解是什么导致它以及如何解决它.

javascript node.js express socket.io nodejitsu

13
推荐指数
1
解决办法
3525
查看次数

为什么(数学中的var i)不能在Javascript中迭代Math.*?

出于某种原因(数学中的var i){console.log(i)}在Javascript中没有显示预期的tan,cos,atan2,E,PI.

javascript

10
推荐指数
2
解决办法
1147
查看次数

从继承父作用域的字符串创建函数

在Javascript中,有没有办法从字符串创建函数(例如通过新的Function()构造函数)并让它继承父作用域?例如:

(function(){
    function yay(){
    }
    var blah = "super yay"
    yay.prototype.testy = new Function("alert(blah)")
    yay.prototype.hello = function(){alert(blah)}
    whee = new yay();
    whee.hello()
    whee.testy()
})()
Run Code Online (Sandbox Code Playgroud)

有没有办法让whee.testy()也警告"超级yay"?

javascript scope function

5
推荐指数
1
解决办法
2228
查看次数

JS和Python中^运算符的区别

我需要移植一些涉及的JS代码Math.random()*2147483648)^(new Date).getTime().虽然它看起来像较小的数字,但python函数和JS函数在功能上是等价的,但是像这样的大数字,值最终完全不同.

蟒蛇:

>>> 2147483647 ^ 1257628307380
1257075044427
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

> 2147483647 ^ 1257628307380
-1350373301
Run Code Online (Sandbox Code Playgroud)

如何从python获取Javascript值?

javascript python bit-manipulation xor

2
推荐指数
1
解决办法
621
查看次数