Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 67

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

09.07.2017, 20:07. Показов 1420. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru