crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Высокоуровневая обёртка над QNetworkAccessManager для упрощения работы с веб
DOGG
  опции профиля:
сообщение 26.8.2016, 0:36
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 9.8.2011
Из: Москва
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


Привет, народ! Мы выложили нашу небольшую библиотеку. Она предоставляет удобный способ для работы с вебом.

Например, загрузить страницу можно так:
const QByteArray data = NetworkRequestLoader::loadSync("https://github.com");

или так:
NetworkRequestLoader::loadAsync("https://github.com", [] (const QByteArray& _loadedData) {
    qDebug() << "Loaded" << _loadedData.size() << "bytes.";
});

Если кому интересно, то пощупать можно тут - https://github.com/dimkanovikov/WebLoader.

Обратная связь приветствуется! Критика тоже!;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.8.2016, 12:00
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 907
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 141 раз(а)




Репутация:   9  


Хммм, а зачем заводить по потоку на каждый запрос? QNAM и так асинхронно делает запросы. Достаточно просто немного обвязать reply объект, чтобы было удобненько и все. Очередь и пул воркеров тут явный оверкилл (еще и искусственое ограничение по количеству тредов). Для такой IO-bound задачи потоки не нужны.

И уж если вы используете потоки, то в NetworkQueue должна быть синхронизация.

Неплохо бы было сделать вместо callback-интерфейса future-интерфейс. Стильно, модно, молодежно и гораздо удобней.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 6.9.2016, 19:13
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 9.8.2011
Из: Москва
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


lanz, спасибо, попробуем сделать без потоков. Пока не могу сказать однозначно лучше это будет или нет, так как у нас есть кейс, когда нужно грузить много фотографий и при этом чтобы интерфейс не замораживался.

На счёт очереди и ограничения - дело в том, что QNetworkAccessManager течёт (https://bugreports.qt.io/browse/QTBUG-30817), а если использовать один QNAM на всё приложение, то мы ограничены всего шестью параллельными запросами.

Цитата(lanz @ 26.8.2016, 12:00) *
должна быть синхронизация


А где тут могут возникнуть проблемы на ваш взгляд? Потоки только перекидывают сами себя из одного списка в другой...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 7.9.2016, 10:33
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 907
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 141 раз(а)




Репутация:   9  


Цитата
Пока не могу сказать однозначно лучше это будет или нет, так как у нас есть кейс, когда нужно грузить много фотографий и при этом чтобы интерфейс не замораживался.

Будет лучше, потому что нет ограничения по числу потоков. Интерфейс и так не замораживается, т.к. QNAM асинхронный. Или вы о чем?

Цитата
QNetworkAccessManager течёт (https://bugreports.qt.io/browse/QTBUG-30817)

Баг не подтвержден, не могу ничего сказать. Но у вас в каждом треде по QNAM, который течёт. Чем ваше решение лучше?

Цитата
а если использовать один QNAM на всё приложение, то мы ограничены всего шестью параллельными запросами.

Цитата
Currently, for the HTTP protocol on desktop platforms, 6 requests are executed in parallel for one host/port combination.


Цитата
А где тут могут возникнуть проблемы на ваш взгляд? Потоки только перекидывают сами себя из одного списка в другой...

Это я погорячился конечно, я думал у вас обычный пул потоков и producer-consumer. Но у вас все гораздо веселее :lol:
Вот скажите, зачем вы ПЕРЕСОЗДАЕТЕ поток на каждый запрос?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.3.2017, 2:36