Разбивка выделения при закачке на части

Запрашиваем и выполняем хотелки к SAS.Планете вне очереди

Модераторы: vdemidov, Tolik

Правила форума
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.
Аватара пользователя
vdemidov
Гуру
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз
Поблагодарили: 157 раз

Re: Разбивка выделения при закачке на части

Сообщение vdemidov »

zed писал(а): Может это wininet так шутит, не знаю.
Скорее всего именно он. Была еще проблема у vasketsov с подключением к прокси
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

Да, wininet во всём виноват: https://support.microsoft.com/en-us/kb/183110

Решается установкой максимального лимита на процесс:

Код: Выделить всё

const
  INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73;
  INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74;
var
  buf: ULONG;
  res: Boolean;
begin
  buf := 50;
  res := InternetSetOption(nil, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @buf, SizeOf(buf));
  buf := 50;
  res := InternetSetOption(nil, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @buf, SizeOf(buf));
end.
Теперь надо придумать, куда это вкорячить, чтобы оно срабатывало до того, как выполнится хоть один запрос.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

zed писал(а):Решается установкой максимального лимита на процесс:
Пофиксил.
Simultaneous connections limit
Всё-таки это лимит не соединений, а запросов. Установленных открытых соединений с сервером может быть больше, чем параллельных запросов из-за алиасов. Если у карты только один хост, без алиасов, то да, всё просто: один запрос = одно соединение. В противном же случае, соединений может быть до: (Число алиасов) * (Число MaxConnectToServerCount). Соединения держит WinInet для keep-alive запросов. Если соединения будут рваться после каждого запроса, то превышения соединений над запросами не будет.

Предлагаю назвать: Max simultaneous requests number / Макс число параллельных запросов. Для ясности, можно ещё подписать HTTP(S)-requests, вместо requests.
Tolik
Гуру
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 283 раза
Поблагодарили: 587 раз

Re: Разбивка выделения при закачке на части

Сообщение Tolik »

Как всё запутано...
Max simultaneous requests number - не годится, т.к. запросы не могут быть одновременными: запрос - это не длительный процесс (как сессия), а только отправленный пакет.
Думаю, всем будет проще, если использовать привычный Max connect to server count, что бы это ни значило...
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

Запрос вполне себе длительный процесс. Словосочетание довольно распространено:

http://serverfault.com/questions/75054/ ... -to-handle
https://docs.oracle.com/cd/E19857-01/82 ... index.html

Или ещё можно вот так: Max concurrent http(s)-requests number
Tolik
Гуру
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 283 раза
Поблагодарили: 587 раз

Re: Разбивка выделения при закачке на части

Сообщение Tolik »

А так мне нравится :)
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

Изменения в ночнушке.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

Нашёл и исправил парочку багов:
- если запустить закачку в двух и более окошках (для одной карты), а потом закрыть одно из них во время закачки, второе затормаживалось на 30 сек.
- если при разделении области, какому-то окошку не доставалось ни одного тайла для обработки, вываливалась ошибка.

Изменения в ночнушке.
Аватара пользователя
Parasite
Администратор
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раза
Поблагодарили: 508 раз

Re: Разбивка выделения при закачке на части

Сообщение Parasite »

Вроде бы работает так, как требуется. Откровенных багов пока не выявлено.
Пожелание: в гуе, рядом с окошком выбора числа потоков - возможно ли писать текущий MaxConnectToServerCount, если он был задан в ZMP (и, соответственно, не давать ввести цифирку больше оного)?
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Разбивка выделения при закачке на части

Сообщение zed »

А точно, всегда нужно ограничиваться этим числом? Сейчас там по дефолту число устанавливается на MaxConnectToServerCount при открытии окна операции с областью. Могу сделать, чтобы оно реагировало на смену карты и менять верхнюю границу на этот дефолт. Делать дополнительные надписи нет необходимости.
Закрыто

Вернуться в «Внеочередное исполнение хотелок»