Форум программистов, компьютерный форум, киберфорум
Наши страницы

Node.js

Войти
Регистрация
Восстановить пароль
 
golden103
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 55
#1

Node и скорость запроса request - Node.js

09.07.2017, 20:07. Просмотров 273. Ответов 8

Всем доброго времени суток!
И снова я обращаюсь к гуру этого форума за помощью.
Суть в чем, делаю бота для торговой площадки, который через сокет сканирует новые, добавленные вещи и скупает их если название и цена совпадают с теми что я указываю, все вроде работает, но бот не успевает купить вещь, так как проходит слишком много времени( порядка 250 - 300мс ), не хитрым кодом я проверил время выполнения скрипта и понял что во всем виновата функция парсинга информации о вещи. Найти решение мне так и не удалось, пробовал найти альтернативу request, но не вышло. Вся надежда на вас
PS. Пробую открыть ссылку из функции в браузере, консоль показывает время выполнения 100 - 180мс.

Функция парсинга информации:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function getItemsInfo( classid, instanceid, infoCallback ) {
    request( 'https://market.csgo.com/api/ItemInfo/' +classid+ '_' +instanceid+ '/ru/?key=' +apiKey, function( err, resp, body ) { 
        if( err && resp.statusCode !== 200 ) {
            loggerMess( 'Ошибка!: ' +resp.err, 'error' );
            return;
        }
        if( typeof( body ) === 'string' ) {
            body = JSON.parse( body );
        }
        infoCallback( body );
    });
}
0
Миниатюры
Node и скорость запроса request  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2017, 20:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Node и скорость запроса request (Node.js):

Не запускается пакет node js - пакетами? npm? сам node? gulp? - Node.js
Всем доброго времени суток. Есть такая проблема, пытаюсь перебраться на Linux (Ubuntu) Установил node js по докам (да и вообще как...

Request - передача данных - Node.js
Здраствуйте, как из request передать body чтобы его можно было видеть вне функции . Return не помогает (( помогите var vkurl =...

Node.js - Node.js
Всем привет,наткнулся на такой чат,вот решил его взять и доработать,вот сам код чата: сторона сервера: var http = require('http'); ...

Избавиться от request header - referer - JavaScript
Как можно избавиться от request header , а именно от referer ? Желательно средствами javascript или GreaseMonkey . К примеру на сайте...

установка NODE.JS - Node.js
Здравствуйте! Помогите, кто сталкивался с установкой NODE.JS, и у кого это удачно все закончилось) просьба не отсылать сразу на хабр со...

node-webkit - Node.js
Доброго времени суток. возможно ошибся с разделом, но может в курсе когда появилась технология node-webkit и в чем его идея (суть). В...

8
whiteapps
398 / 362 / 172
Регистрация: 18.07.2014
Сообщений: 1,236
10.07.2017, 12:57 #2
golden103, с трудом верится что
Javascript
1
body = JSON.parse( body );
может занимать 250-300мс

покажите как вы это высчитали
и покажите, пожалуйста, что у вас в колбэке infoCallback
0
golden103
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 55
10.07.2017, 13:25  [ТС] #3
Время узнал:
Javascript
1
2
3
var time = new Date().getTime(); // в начале
var resTime = new Date().getTime() - time;//После выполнения getItemsInfo
loggerMess( resTime, 'info' );
infoCallback просто передает полученный json в функцию getItemsInfo( вроде правильно выразился )

Функция где должна происходить "магия":
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function newItems( data ) {
    var time = new Date().getTime();
    if( typeof( data ) === 'string' ) {
        data = JSON.parse( data );  
        var objData = JSON.parse( data.data );
    }
    var app = objData.app;
    if( app == 'go' ) {
        var market_hash_name = objData.i_market_hash_name;
        var classid = objData.i_classid;
        var instanceid = objData.i_instanceid;
        var uiprice = objData.ui_price; 
        for( items in OrderItems ) {
            //console.log( items );
            if( market_hash_name === OrderItems[items].name && uiprice <= OrderItems[items].price ) {
                var OItemsName = OrderItems[items].name;
                var OItemsPrice = OrderItems[items].price;
                var OItemsAutobuy = OrderItems[items].autobuy;
                getItemsInfo( classid, instanceid, function( info ) {
                    //var info = JSON.parse( body );
                    //console.log( info.rarity );
                    if( info.stickers != null ) {
                        var stickerNum = info.stickers.split( '|' );
                        if( stickerNum.length >= 1 && stickerNum.length <= 3 ) {
                            if( OItemsAutobuy === 'yes' ) {
                                buyItems( classid, instanceid, uiprice, info.hash );
                            }
                            console.log( 'M: ' +market_hash_name+ ' (' +uiprice+ ') - O: ' +OItemsName+ ' S: ' +stickerNum.length+ ' A: ' +OItemsAutobuy );
                            console.log( 'https://market.csgo.com/item/' +classid+ '-' +instanceid );
                        } else if( stickerNum.length == 4 ) {
                            buyItems( classid, instanceid, uiprice, info.hash );
                            /*if( openBrowser ) {
                                opener( 'https://market.csgo.com/item/' +classid+ '-' +instanceid, { app: 'firefox' } );
                            }*/
                            console.log( 'stickerNum.length == 4' );
                            console.log( 'M: ' +market_hash_name+ ' (' +uiprice+ ' ) - O: ' +OItemsName+ ' S: ' +stickerNum.length+ ' A: ' +OItemsAutobuy );
                        }
                        var resTime = new Date().getTime() - time;
                        loggerMess( resTime, 'info' );
                        //if( soundAlert ) { console.log( '\x07' ); }                       
                    }
                    
                } );
            }
            if( purchased ) {
                break;  
            }
        }
    }
}
В newItems( data ) идет информация с сокета через onmessage, типа string
0
golden103
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 55
12.07.2017, 00:11  [ТС] #4
Проблема так и не решена, все еще требуется помощь
0
muxahuk1214
Coding is art
179 / 177 / 35
Регистрация: 04.09.2013
Сообщений: 566
12.07.2017, 20:05 #5
тут вам в теории может помочь только увеличение скорости интернета на сервере, что бы быстрее отправлял и получал запрос через request библиотеку.
Но, есть так же такая вещь как горизонтальное расширение вашего приложения.
Грубо говоря создаёте не 1-н "сервер" а 10, так нагрузка будет меньше и может быстрее будет отдавать данные.
0
whiteapps
398 / 362 / 172
Регистрация: 18.07.2014
Сообщений: 1,236
13.07.2017, 12:01 #6
golden103, если это возможно, скиньте архивом все что есть, включая package.json, но без node_modules

Не по теме:


muxahuk1214, человек спрашивает как оптимизировать программно. мне кажется, ответ купи 10 серверов, не очень тут подходит

0
golden103
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 55
13.07.2017, 13:14  [ТС] #7
https://yadi.sk/d/S9dQFhUD3L2S4H

Добавлено через 1 минуту
Проблема в том что доступа к серверу нет, это торговая площадка и есть только ее апи.
0
muxahuk1214
Coding is art
179 / 177 / 35
Регистрация: 04.09.2013
Сообщений: 566
14.07.2017, 01:27 #8
Всё упираеться в скорость соединения интернета на вашем сервере..
Тем более вы делаете n-е кол-во запросов одновременно, что может снижать скорость.

и учитывая что вы далее делаете buyItems который тоже делает запрос
+ использует fs.writeFileSync ( что не есть хорошо, лучше fs.writeFile )
вот тут у вас получается скорость где-то равна
n + nx + 2ny ( где x - скорость работы файловой системы, y - пропускная способность интернета, n - кол-во элементов в массиве )
0
golden103
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 55
14.07.2017, 18:56  [ТС] #9
Спустя 2 без сонные ночи и несколько литров выпитого кофе, я узнал что информация о стикерах так же идет через сокет, а это значит что не нужно вызывать itemsinfo в основной функции, но минус с том что мне нужно для покупки узнать hash этой вещи, а это опять же запрос к itemsinfo, думал как то объединить запрос к получению hash и покупке, но не могу сообразить как это сделать...

На другом форуме один человек посоветовал:
Убери запрос на ItemInfo, тебе от куда нужно только hash, сделай разовые запросы для каждого предмета из твоего списка предметов и занеси в массив под каждый предмет.
Hash не меняется со временем, он статичен и уникален для каждого предмета.
Так что не вижу смысла каждый раз просить его.
Но как это будет выглядеть и как будет проходить сверка, я не понимаю...
0
14.07.2017, 18:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2017, 18:56
Привет! Вот еще темы с ответами:

Mongodb + node.js - Node.js
Здравствуйте . Есть код для подключения к mongodb в node , через модуль mongodb . Далее данные должны быть отображены сервером при...

Brackets + Node.js - Node.js
Всем привет! Как известно Brackets интегрировал Node.js в свое ядро, но незадача, что интегрированный Node.js имеет 32 битную...

Поддомены на Node.js - Node.js
Здравствуйте, форумчане начал понимаете ли писать себе сайтик на ноде, просто для теста своих знаний, и понял, что ничерта не знаю ...

node.js vs PHP - Node.js
Здравствуйте, уважаемые форумчане! Недавно наткнулся на короткий ввод в сей чудесный node.js и был поражен его скоростью,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru