Итак, каждые 0,5 секунды, я заинтересован в том, чтобы как можно быстрее получить цену биткойна.nodejs - слишком долго https-запросы
curl https://www.okcoin.com/api/ticker.do?ok=1
*** первым я делаю это в nodejs:
var https = require('https');
var options = {
host: 'www.okcoin.com',
port: 443,
path: '/api/ticker.do?ok=1',
method: 'GET'
};
var time;
time=process.hrtime();
var req = https.request(options, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
var diff=process.hrtime(time);
console.log("took %dms", (diff[0] * 1e9 + diff[1])/1e6);
var obj=JSON.parse(chunk);
console.log("buy: "+obj.ticker.buy);
console.log("sell: "+obj.ticker.sell);
});
});
req.end();
я получаю:
took 1033.241079ms
buy: 356.83
sell: 357.02
1033ms является слишком медленным для меня ...
*** Во-вторых, я (проверяю новую цену каждые 2 секунды):
var https = require('https');
var options = {
host: 'www.okcoin.com',
port: 443,
path: '/api/ticker.do?ok=1',
method: 'GET'
};
var time;
setInterval(function(){
time=process.hrtime();
https.get(options,function(res) {
res.on('data', function (body) {
var diff=process.hrtime(time);
console.log("took %dms", (diff[0] * 1e9 + diff[1])/1e6);
});
})
},2000);
Дает:
took 983.929691ms
took 944.539056ms
took 650.801495ms
took 729.976666ms
took 474.631864ms
took 1577.007647ms
took 1263.056615ms
took 929.032185ms
took 248.543903ms
took 702.258904ms
took 250.711814ms
took 832.824128ms
took 252.986642ms
took 255.080667ms
took 301.444557ms
took 297.921488ms
Тем не менее выглядит медленно мне ...
*** 3rdly, я использую agentkeepalive модуль (опять же опрос каждые 2 секунды):
var https = require('https');
var kaa = require('agentkeepalive').HttpsAgent;
var keepaliveAgent = new kaa({
maxSockets: 100,
maxFreeSockets: 10,
timeout: 60000,
keepAliveTimeout: 30000 //free socket keepalive for 30 seconds
});
var options = {
host: 'www.okcoin.com',
port: 443,
path: '/api/ticker.do?ok=1',
method: 'GET',
agent: keepaliveAgent
};
var time;
setInterval(function(){
time=process.hrtime();
https.get(options,function(res) {
res.on('data', function (body) {
var diff=process.hrtime(time);
console.log("took %dms", (diff[0] * 1e9 + diff[1])/1e6);
});
})
},2000);
Дает:
took 1673.525828ms
took 286.205758ms
took 276.441161ms
took 276.11333ms
took 770.785999ms
took 470.329748ms
took 235.586808ms
took 284.85831ms
took 238.250933ms
took 239.285309ms
took 237.260822ms
took 460.541798ms
took 853.24585ms
took 234.314756ms
took 285.784553ms
took 286.228781ms
took 235.298578ms
took 569.50514ms
took 235.890092ms
took 241.18033ms
took 234.773913ms
Это лучшее, что я могу сделать? Я использую все это из VPS в Великобритании. Помимо перемещения моего VPS ближе к Гонконгу, чтобы получить более низкую задержку; есть ли что-нибудь еще, что я могу сделать? Откуда я знаю, что keepalive работает? Могу ли я обойти любое из протоколов SSL или сети?
Вы можете проверить, если KeepAlive работает вынюхиванию запросов и ответов с помощью Wireshark, например. – tiledcode
Wireshark кажется излишним; ( – Eamorr