0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 67

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

09.07.2017, 20:07. Показов 1444. Ответов 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 );
    });
}
Миниатюры
Node и скорость запроса request  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2017, 20:07
Ответы с готовыми решениями:

Реализация curl GET запроса в Node.js
Приветствую, нужно сделать запрос на api omnidesk с аутентификацией.В документации у них приведет пример GET запроса для PHP: curl -u :...

Прочитать тело запроса в Node.js
Добрый день. На сервере (Node.js) написан такой код let post = " "; req.on('data', function(str){ post += str; ...

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

8
 Аватар для whiteapps
414 / 379 / 220
Регистрация: 18.07.2014
Сообщений: 1,259
10.07.2017, 12:57
golden103, с трудом верится что
JavaScript
1
body = JSON.parse( body );
может занимать 250-300мс

покажите как вы это высчитали
и покажите, пожалуйста, что у вас в колбэке infoCallback
0
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 67
10.07.2017, 13:25  [ТС]
Время узнал:
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
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 67
12.07.2017, 00:11  [ТС]
Проблема так и не решена, все еще требуется помощь
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
12.07.2017, 20:05
тут вам в теории может помочь только увеличение скорости интернета на сервере, что бы быстрее отправлял и получал запрос через request библиотеку.
Но, есть так же такая вещь как горизонтальное расширение вашего приложения.
Грубо говоря создаёте не 1-н "сервер" а 10, так нагрузка будет меньше и может быстрее будет отдавать данные.
0
 Аватар для whiteapps
414 / 379 / 220
Регистрация: 18.07.2014
Сообщений: 1,259
13.07.2017, 12:01
golden103, если это возможно, скиньте архивом все что есть, включая package.json, но без node_modules

Не по теме:


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

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

Добавлено через 1 минуту
Проблема в том что доступа к серверу нет, это торговая площадка и есть только ее апи.
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
14.07.2017, 01:27
Всё упираеться в скорость соединения интернета на вашем сервере..
Тем более вы делаете n-е кол-во запросов одновременно, что может снижать скорость.

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

На другом форуме один человек посоветовал:
Убери запрос на ItemInfo, тебе от куда нужно только hash, сделай разовые запросы для каждого предмета из твоего списка предметов и занеси в массив под каждый предмет.
Hash не меняется со временем, он статичен и уникален для каждого предмета.
Так что не вижу смысла каждый раз просить его.
Но как это будет выглядеть и как будет проходить сверка, я не понимаю...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2017, 18:56
Помогаю со студенческими работами здесь

Требуется проверить вызывался ли Request.Form перед тем как вызвать Request.BinaryRead
Требуется проверить вызывался ли Request.Form перед тем как вызвать Request.BinaryRead

Request.Response ошибка 400 bad request
Добрый день! Прошу помочь с обработкой запросов в Python 2.7.11 Принимать реквест и сохранить на сервере файл из него уже...

Скорость выполнения запроса
Один и тот же запрос из SMS выполняется в сотни раз быстрее чем из кода. var distrSalesByDistr = (from sls in context.tbl_sales ...

Скорость запроса данных из БД
Добрый день, помогите пожалуйста разобраться в чем проблема, может кто с таким сталкивался. Есть БД на Access. Файл БД был ранее...

Скорость выполнения запроса
Не могу понять почему медленно выполняется запрос. select distinct DATEPART(day,CAST(dateDocument as date)) as dateTax, (select...


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru