SASGIS

Веб-картография и навигация

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

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

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

Правила форума
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.

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

Сообщение vdemidov » 20 май 2016, 13:03

zed писал(а): Может это wininet так шутит, не знаю.

Скорее всего именно он. Была еще проблема у vasketsov с подключением к прокси
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

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

Сообщение zed » 20 май 2016, 13:08

Да, 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 » 20 май 2016, 14:38

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

Пофиксил.
Simultaneous connections limit

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

Предлагаю назвать: Max simultaneous requests number / Макс число параллельных запросов. Для ясности, можно ещё подписать HTTP(S)-requests, вместо requests.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение Tolik » 20 май 2016, 15:39

Как всё запутано...
Max simultaneous requests number - не годится, т.к. запросы не могут быть одновременными: запрос - это не длительный процесс (как сессия), а только отправленный пакет.
Думаю, всем будет проще, если использовать привычный Max connect to server count, что бы это ни значило...
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

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

Сообщение zed » 20 май 2016, 16:07

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

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

Или ещё можно вот так: Max concurrent http(s)-requests number
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение Tolik » 20 май 2016, 16:39

А так мне нравится :)
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

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

Сообщение zed » 20 май 2016, 19:52

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

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

Сообщение zed » 21 май 2016, 12:09

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

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

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

Сообщение Parasite » 26 май 2016, 20:43

Вроде бы работает так, как требуется. Откровенных багов пока не выявлено.
Пожелание: в гуе, рядом с окошком выбора числа потоков - возможно ли писать текущий MaxConnectToServerCount, если он был задан в ZMP (и, соответственно, не давать ввести цифирку больше оного)?
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

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

Сообщение zed » 26 май 2016, 21:43

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

Пред.След.

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3