Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Ограничивает ли библиотека Wininet проходящий через неё трафик? 20.09.09 13:32
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 20.09.09 13:33 Количество правок: 1
|
Есть сервер с каналом доступа в интернет 100 mbit. Пишу программу, которая загружает контент с разных страниц. Программа пользуется услугами библиотеки WinInet. Для ускорения обработки контента я создаю сразу несколько потоков, которые получают данные из Интернет.
Вот только прироста в скорости это не даёт: что 20 потоков используют только 2.5 mbit от всего трафика, что 200, что 1000, но при этом все потоки создаются и все в интернет стучатся. А если запустить 2 копии программы, то используется уже 5 mbit трафика.
Как такое объяснить? Библиотека Wininet накладывает ограничение на используемый трафик? Систему программа практически не грузит. В диспетчере задач "Бездействие системы" не опускается ниже 90%.
|
|
Вопрос по-прежнему актуален. 22.09.09 08:22
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
| |
Второй вопрос (как сайты узнают, что на них заходят с одного... 26.09.09 09:41
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
Второй вопрос (как сайты узнают, что на них заходят с одного компа, если куки и IP разные) тоже разрешился. Стыдно признаться, но это был мой касяк: я случайно поместил строковую переменную не в функцию потока, а в глобальную область видимости, и из-за этого у всех потоков были одинаковые куки.
PS. Целую неделю из-за этой проблемы мучался, а оказалось, что одна строчка кода виновата!
|
|
Спасибо, мужики! Оба решения помогли! Но вот ещё один вопрос. 20.09.09 15:40
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 20.09.09 15:41 Количество правок: 1
|
Как тот или иной сайт определяет, что два пользователя зашли с одного компьютера, если я использую платные анонимные прокси?
Когда я двумя потоками (у каждого из которых свои заголовки и куки) захожу на сайты требующие авторизации, то один из потоков обламывается. Когда запускаю две программы параллельно (каждая с одним потоком), то та же самая комбинация проходит на ура (обе программы авторизуются и все довольны).
|
| |
[Win32] Если прокси для каждого подключения свои, то на вскидку - очевидная проблема - куки, которые wininet хранит в куче для одного процесса. возможно поможет шаманство с InternetGetCookie - InternetSetCookie для каждого подключения. 20.09.09 16:20
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 20.09.09 16:22 Количество правок: 2
|
MSDN, InternetGetCookie
|
| | |
Нет, насколько я понимаю проблема не в этом. Я вызываю... 20.09.09 16:33
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 20.09.09 16:45 Количество правок: 1
|
Нет, насколько я понимаю проблема не в этом. Я вызываю функцию HttpOpenRequest с параметром INTERNET_FLAG_NO_COOKIES, благодаря этому Wininet игнорирует ответ сервера "set-cookie". А при соединении я сам устанавливаю те куки, которые мне нужны добавляя их к заголовку запроса.
Поэтому мне кажется, что проблема не в куках. Может быть я и не прав, но свои вышеописанные слова я проверял на локальном прокси-сервере, в котором видны все заголовки и контент. Плюс, если бы дело было в куках, то "афёра" с двойным запуском программы также не удалась бы, а она работает.
PS. Internet(Set/Get)Cookie в данном случае неприменимы, т.к. нет возможности использовать их исключительно для одного потока (они влияют сразу не только на все потоки конкретного процесса, но и вообще на все процессы).
В ообщем, мне кажется, что пробема не в куках, ну а в чём именно я так и не смог понять. Надеюсь на помощь компетентных людей.
|
| | | |
Куки одни и те же для двух экземпляров программ? 20.09.09 17:57
Автор: kstati <Евгений Борисов> Статус: Elderman
|
> Нет, насколько я понимаю проблема не в этом. Я вызываю > функцию HttpOpenRequest с параметром > INTERNET_FLAG_NO_COOKIES, благодаря этому Wininet > игнорирует ответ сервера "set-cookie". А при соединении я > сам устанавливаю те куки, которые мне нужны добавляя их к > заголовку запроса. > > Поэтому мне кажется, что проблема не в куках. Может быть я > и не прав, но свои вышеописанные слова я проверял на > локальном прокси-сервере, в котором видны все заголовки и > контент. Плюс, если бы дело было в куках, то "афёра" с > двойным запуском программы также не удалась бы, а она > работает. > Куки одни и те же для двух экземпляров программ?
> PS. Internet(Set/Get)Cookie в данном случае неприменимы, > т.к. нет возможности использовать их исключительно для > одного потока (они влияют сразу не только на все потоки > конкретного процесса, но и вообще на все процессы). А кто мешает наладить нормальное межпоточное взаимодействие? Мьютексы в зубы и проблема в контексте одной системы решена
> > В ообщем, мне кажется, что пробема не в куках, ну а в чём > именно я так и не смог понять. Надеюсь на помощь > компетентных людей. Рельно браузер можено идентифицировать только по ip и (или) кукам. По скольку используются разные прокси, то вариант с ип-адресом отпадает.
|
| | | | |
Ёпт, естественно разные! 21.09.09 03:15
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
> Куки одни и те же для двух экземпляров программ? Ёпт, естественно разные!
>А кто мешает наладить нормальное межпоточное взаимодействие?
> Мьютексы в зубы и проблема в контексте одной системы решена При таком подходе пока один поток грузит свои данные другой будет заблокирован. Получается многопоточная программа, которая работает также как и однопоточная.
> Рельно браузер можено идентифицировать только по ip и (или) кукам. > По скольку используются разные прокси, то вариант с ип-адресом > отпадает. Я уже третье сообщение подряд говорю, что IP и куки разные для каждого потока, но тем не менее афёра не проходит. Но! Та же самая афёра проходит для разных процессов. Почему?
|
|
[win32] изначально - нет, но, судя по твоему предыдущему посту работа ведется через прокси. прокси является сервером. предполагаю, что решение рядом: internetsetoption() internet_option_max_conns_per_server 20.09.09 15:15
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 20.09.09 15:24 Количество правок: 4
|
msdn.microsoft.com/en-us/library/aa385328(VS.85).aspx
http://www.google.ru/search?q=internet_option_max_conns_per_server+msdn
|
|
|