Авторизация и многопоток

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Добрый день!
Вопрос по поводу запуска шаблона в несколько потоков (или на несколько выполнений) и авторизацию. Шаблон авторизуется на сайте, делает несколько повторяющихся действий и разлогинивается. В начале шаблона прописана авторизация в аккаунт, но её не надо выполнять много раз (пока производятся эти повторяющиеся действия). Как правильно реализовать? Я пока вижу только такой способ: перед авторизацией вставляем логику на проверку определенного слова которое есть если я залогинен. Если "да" - то пропускаем авторизацию и выполняем основную часть шаблона, если "нет" - то идем по ветке авторизации с последующим выполнением шаблона. Правильно я пытаюсь реализовать?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
Добрый день!
Вопрос по поводу запуска шаблона в несколько потоков (или на несколько выполнений) и авторизацию. Шаблон авторизуется на сайте, делает несколько повторяющихся действий и разлогинивается. В начале шаблона прописана авторизация в аккаунт, но её не надо выполнять много раз (пока производятся эти повторяющиеся действия). Как правильно реализовать? Я пока вижу только такой способ: перед авторизацией вставляем логику на проверку определенного слова которое есть если я залогинен. Если "да" - то пропускаем авторизацию и выполняем основную часть шаблона, если "нет" - то идем по ветке авторизации с последующим выполнением шаблона. Правильно я пытаюсь реализовать?
Да, вы все правильно и логично делаете. Авторизацию можно реализовать отдельным вложенным шаблоном - http://zennolab.com/wiki/ru:project_in_project
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
нет не правильно вы делаете. В то время как один поток авторизируется остальные должны намертво стать и ждать пока он это сделает. Более детально это выглядит так.
Блочится кубик на сишарпе и делается проверка на блок-файл.
а.Если его нет, то он создается и в переменную, которая отвечает за разрешение авторизироваться, ставится допустим 1. Произходит авторизация с проверкой. Если все норм, сохраняется профиль и удаляется блокирующий файл. Если не норм или критическая ошибка потока, блокирующий файл нужно удалить, к тому времени все потоки уже будут висеть в ожидании, зайдут на страницу, поймут что авторизвация не удалась и закроются.
б.Если файл есть то нужно просто подождать пока он удалится. На всякий случай можно поставить таймаут ожидания и проверку на удачную авторизацию.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
нет не правильно вы делаете. В то время как один поток авторизируется остальные должны намертво стать и ждать пока он это сделает. Более детально это выглядит так.
Блочится кубик на сишарпе и делается проверка на блок-файл.
а.Если его нет, то он создается и в переменную, которая отвечает за разрешение авторизироваться, ставится допустим 1. Произходит авторизация с проверкой. Если все норм, сохраняется профиль и удаляется блокирующий файл. Если не норм или критическая ошибка потока, блокирующий файл нужно удалить, к тому времени все потоки уже будут висеть в ожидании, зайдут на страницу, поймут что авторизвация не удалась и закроются.
б.Если файл есть то нужно просто подождать пока он удалится. На всякий случай можно поставить таймаут ожидания и проверку на удачную авторизацию.
Сложновато для новичка. Почему с проверкой не прокатит?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 361
Благодарностей
9 094
Баллы
113
а я обычно проверяю не текст, а наличие поля ввода логина (или пароля) в начале шаблона..
если поле есть, то авторизуемся, если поля нет, то авторизация не нужна и работаем далее..
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
например, имеем два потока
один из них первым определил что не авторизировался, начинает авторизироваться,
а в это время другой тоже определил что не авторизировался и начинает заполнять поля.
Вопрос 1: это нормально?
Вопрос 2: что будет при 10 потоках?
Вопрос 3: что будет с аккаунтом который так часто авторизируется?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
например, имеем два потока
один из них первым определил что не авторизировался, начинает авторизироваться,
а в это время другой тоже определил что не авторизировался и начинает заполнять поля.
Вопрос 1: это нормально?
Вопрос 2: что будет при 10 потоках?
Вопрос 3: что будет с аккаунтом который так часто авторизируется?
Потоки поднимаются не одновременно. Первый авторизует, остальные определят авторизацию.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
если потоки поднимаются неодновременно, это не значит что они не могут пойти на авторизацию одновременно.
вообще здесь понятие одновременности растягивается на весь период авторизации. Если подгрузка страницы авторизации проходит две три секунды как минимум, потом заполнение полей и нажатие кнопки авторизации еще две три секунды, потом обновление страницы и сохранение профиля это еще две три секунды в лучшем случае. Подумайте о том что может произойти за это время и сколько инстансов подымится если машина нормальная.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
если потоки поднимаются неодновременно, это не значит что они не могут пойти на авторизацию одновременно.
вообще здесь понятие одновременности растягивается на весь период авторизации. Если подгрузка страницы авторизации проходит две три секунды как минимум, потом заполнение полей и нажатие кнопки авторизации еще две три секунды, потом обновление страницы и сохранение профиля это еще две три секунды в лучшем случае. Подумайте о том что может произойти за это время и сколько инстансов подымится если машина нормальная.
Я думаю несколько потоков проскочат. Но дальше все равно подхватят авторизацию. Блок - это конечно наверняка, но сложновато.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)