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

Как ускорить отправку GET запроса

26.12.2019, 19:40. Показов 9495. Ответов 10

Студворк — интернет-сервис помощи студентам
Поомогите найти решение. Подключаюсь через websocket к одной бирже, приходит большой поток информации,примерно 30-40 сообщений в секунду,каждое сообщение мне нужно сравнить с моими данными, если есть нужное, отправить GET запрос. Это нужно сделать максимально быстро, ускорил на сколько смог:
1) мои данный хранятся в словаре и запрашиваю их по ключу, вместо поиска в цикле(это оказалось примерно в 10 раз быстрее)
2) сообщение приходит типа str, но в формате json, нужные мне данные вырезаю что бы не созавать Json объект(это приблизительно в 15 раз быстрее)
3) get запросы отправляю через сессию(не могу оценить на сколько быстрее это происходит чем без сессии)
4) арендовал сервак в Торронто от туда самый маленький ping, тестировал через сервисы в интернете(запрос отправляется в 2 раза быстрее).
И это все мне ни как не помогло, другие боты все равно опережают. Среднее время анализа сообщения и сбор данных перед отправкой 0.0002 сек(до оптимизации было около 0.02), а время отправки запроса и получения ответа от 0.2 до 0.3 (но мне важно лишь получение ответа сервером, посчитать не знаю как, плюс оно еще всегда разное). Есть мысли реализовать это все в cython, либо вообще написать это на Си(пока не знаю как). Но перед тем как вновь тыкать пальцем в небо,решил поинтересоваться у людей которые возможно смогут направить меня на путь истинный.

P.S Скорее всего я оптимизировал не то что надо, потому-что понятно что основное время тратится именно на отправку запроса, пытался использовать библиотеки типа faster-than-requests,asincio,aiohttp,но ни что не помогло, возможно не умею гуглить, в общем буду рад любому совету.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2019, 19:40
Ответы с готовыми решениями:

Как ускорить отправку запросов ?
Требуется отправлять запросы на сервер, причём делать это как можно быстрее, и не дожидаясь ответа от сервера. Как можно это...

Как сделать отправку POST запроса ?
Я совсем новичок в С++. Объясните пожалуйста, как сделать отправку POST запроса на сервер (допустим http://mysitepost.ru), и вывести на...

Как реализовать отправку запроса с определенного ip адреса?
Добрый день, Подскажите, как реализовать такую штуку. Есть сайт, нужно, чтобы SOAP запрос уходил либо с определенного IP адреса,...

10
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,100
26.12.2019, 20:13
4elove4ko, сколько соединений позволяет иметь сервер?

вряд ли тут дело в языке. Скорее всего код выполняется быстро, а задержки проявляются при передаче по сети. Можно попробовать организовать конвейер - с определённым интервалом запускать соединения, результаты тоже будут приходить примерно с таким же интервалом. Затем можно будет попробовать распараллелить на потоки

Добавлено через 2 минуты
ага, я невнимательно прочитал. Оказывается, сначала приходят запросы. Тогда остаётся подключать многопоточную обработку
0
0 / 0 / 0
Регистрация: 03.11.2016
Сообщений: 9
26.12.2019, 21:08  [ТС]
т е получается каждое сообщение которое приходит по веб сокету, проверяется по очереди? И из-за этого грубо говоря накапливается стэк сообщений, так?

Добавлено через 11 минут
Но блин, я даже не знаю если в момент придет 10 сообщений программе понадобится 0.001 сек что-бы их обработать, конечно все равно попробую. Но я больше думал о том что когда создается запрос на сервер, сначала вроде как по домену ищется IP и уже после этого отправляется запрос на IP(не уверен но почему-то у меня такое понимание было) и я вот думал что я же могу вбить IP вручную(тогда сократиться время на поиск(хотя возможно открытая сессия это и делает?)), но как это сделать и что из этого получится не понимаю, а возможно уже бред в голову приходит. Сижу уже 4 суток над этим вопросом голова взрывается
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,100
26.12.2019, 22:16
4elove4ko,что-то мне подсказывает, что реально задержка вовсе не в программе (пропарсить, найти по ключу - это всё очень быстро), а в долгом ответе на GET от сервера (и это скорее всего именно так). Можно отправлять запросы не дожидаясь ответа, а ответы принимать асинхронно.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
27.12.2019, 09:21
Цитата Сообщение от 4elove4ko Посмотреть сообщение
3) get запросы отправляю через сессию(не могу оценить на сколько быстрее это происходит чем без сессии)
На каждую установку tcp-соединения тратится примерно 100-200 мс. Апгрейд протокола до websockets - ещё 200-400 мс.

Меня смущает наличие слов websocket и get-запроса в одной фразе. Вы ничего не путаете? Может, вы просто дёргаете api сайта через http(s)?

Добавлено через 1 минуту
Кажется распутал: у вас два соединения.

Добавлено через 6 минут
Могу предложить такую архитектуру программы:

1) воркеры для обработки входящих сообщений от сервера
2) главный поток, который читает данные из websocket'а и кладёт распарсенные сообщения (без обработки! Только выделяет их) в очередь для дальнейшей обработки их воркерами.
3) воркеры для ответа. В каждом открыто по https-соединению с сервером. Читают из очереди данные и немедленно отправляют их на сервер. Можно ещё вызвать s.flush() для гарантированной отправки.

Структура потока данных:
websocket -> очередь1 -> воркеры с бизнес-логикой -> очередь2 -> воркеры с сетью -> сервер

Добавлено через 1 минуту
Цитата Сообщение от 4elove4ko Посмотреть сообщение
, сначала вроде как по домену ищется IP и уже после этого отправляется запрос на IP(не уверен но почему-то у меня такое понимание было) и я вот думал что я же могу вбить IP вручную(тогда сократиться время на поиск(хотя возможно открытая сессия это и делает?)),
Время на это тратится один раз. Если сессии использовать, то соединение будет переиспользоваться и этих задержек больше не будет.
3
0 / 0 / 0
Регистрация: 28.06.2021
Сообщений: 6
28.06.2021, 11:48
На каждую установку tcp-соединения тратится примерно 100-200 мс. Апгрейд протокола до websockets - ещё 200-400 мс.

Меня смущает наличие слов websocket и get-запроса в одной фразе. Вы ничего не путаете? Может, вы просто дёргаете api сайта через http(s)?

Добавлено через 1 минуту
Кажется распутал: у вас два соединения.

Добавлено через 6 минут
Могу предложить такую архитектуру программы:

1) воркеры для обработки входящих сообщений от сервера
2) главный поток, который читает данные из websocket'а и кладёт распарсенные сообщения (без обработки! Только выделяет их) в очередь для дальнейшей обработки их воркерами.
3) воркеры для ответа. В каждом открыто по https-соединению с сервером. Читают из очереди данные и немедленно отправляют их на сервер. Можно ещё вызвать s.flush() для гарантированной отправки.

Структура потока данных:
websocket -> очередь1 -> воркеры с бизнес-логикой -> очередь2 -> воркеры с сетью -> сервер
Как можно с тобой связаться? У меня подобная проблема, но реализовать твой совет самостоятельно пока не смогу
0
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
28.06.2021, 12:01
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Структура потока данных:
websocket -> очередь1 -> воркеры с бизнес-логикой -> очередь2 -> воркеры с сетью -> сервер
предлагаю проапгрейдить предложение,- не очередь а асинхронная обработка, возможно с процессами-демонами-
те один запрос одна программа (имеется ввиду, заранее запущеная и готовая к обработке то есть так:
сокет->отдать демонам (данные передавать по shmop)->демоны->получить данные и отправить их(тк скорее всего с разных портов будет низя)
0
0 / 0 / 0
Регистрация: 28.06.2021
Сообщений: 6
28.06.2021, 12:06
Цитата Сообщение от user-ganz Посмотреть сообщение
предлагаю проапгрейдить предложение,- не очередь а асинхронная обработка, возможно с процессами-демонами-
те один запрос одна программа (имеется ввиду, заранее запущеная и готовая к обработке то есть так:
сокет->отдать демонам (данные передавать по shmop)->демоны->получить данные и отправить их(тк скорее всего с разных портов будет низя)
Мне нужен человек, который в силах это все реализовать, естественно не бесплатно)
Если тут есть желающие поучаствовать - велкам, пишите на почту nikita.chaika.d@gmail.com.
Если есть ребята из Москвы - вообще идеально
0
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
28.06.2021, 12:12
Цитата Сообщение от nekto_chayka Посмотреть сообщение
естественно не бесплатно)
предлагаю создать тему во "фриланс" - отбоя от желающих не будет (главное не пугай их сразу страшными словами DDDDD)
сам, увы, не могу,- занят, так что нет гарантии что доведу проект до конца.
но пара часов есть, если нет ни каких тайн то кидай код в ветку пока есть время гляну, естественно бесплатно и без смс
0
0 / 0 / 0
Регистрация: 28.06.2021
Сообщений: 6
28.06.2021, 12:18
Цитата Сообщение от user-ganz Посмотреть сообщение
предлагаю создать тему во "фриланс" - отбоя от желающих не будет (главное не пугай их сразу страшными словами DDDDD)
сам, увы, не могу,- занят, так что нет гарантии что доведу проект до конца.
но пара часов есть, если нет ни каких тайн то кидай код в ветку пока есть время гляну, естественно бесплатно и без смс
Код могу скинуть, но толку мало будет, сейчас пользуюсь библиотекой CCXT Pro и та часть кода, которая могла бы что-то сказать о процессе находится внутри либы, сам в сокетах пока не разбирался. Возможно буду изучать подробно тему сокетов, писать свою либу, чтобы в ней реализовать задуманный план. Но проще и, что немаловажно, быстрее было бы оплатить спеца, который уже все это знает и умеет
0
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
28.06.2021, 12:26
Цитата Сообщение от nekto_chayka Посмотреть сообщение
CCXT Pro
гугл сказал что это яваскрипт. а он по определению медленный, можешь скинуть сервера куда отправляются запросы, то есть использование явы обязательно или нет?
Цитата Сообщение от nekto_chayka Посмотреть сообщение
писать свою либу
, здесь уже нужны сишники (C)
Цитата Сообщение от nekto_chayka Посмотреть сообщение
оплатить спеца
знающего ccxt и python и С? шансы близки к нулю, либо им платить надо столько, что проще самому выучить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2021, 12:26
Помогаю со студенческими работами здесь

Каким образом ускорить отправку запросов Node js?
Суть такова, через вебсокет соединение обрабатываю полученный JSON, из него беру информацию и отправляю post запрос. Я отправляю несколько...

Как сделать отправку SQL запроса и вывод результата при открытии страницы?
Есть код, который работает только при нажатии кнопки submit, как сделать что бы результат выводился сразу при открытии страницы, без...

Как ускорить время выполнения запроса
Здравствуйте, как можно ускорить данный запрос: SELECT id, surname, CASE WHEN ball < 60 THEN 'Низкий' WHEN ball BETWEEN...

Как ускорить выполнение запроса Firebird
Здравствуйте, использую БД firebird 2.5, Delphi xe2, fibplus + ehlib Таблица SALE ID(integer) - счетчик , TID(integer) - ID товара, ...

Кто инициирует отправку ARP запроса?
Модуль какого протокола сетевого стека рабочей станции инициирует отправку ARP-запроса? Это происходит на канальном уровне, т.е., например...


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

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

Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru