PDA

Просмотр полной версии : Многопоточность через прокси


Freedom
14.01.2010, 18:39
Ребят объясните плиз принципы построения многопоточных приложений через прокси.

Дано. Многопоточная прога чекающая акки на валид.
Нужно сделать чтобы эта радость работала через список прокси.

Без прокси все классно работает.

если запускаешь поток с чеком акков через прокси, то если прокси невалиден то поток завершается и акк естественно не чекается и всё идет дальше.

Вопрос. Как все нормально организовать. Чекать прокси на валид перед чеком или как нибудь по другому ?

drim
14.01.2010, 18:42
Ребят объясните плиз принципы построения многопоточных приложений через прокси.

Дано. Многопоточная прога чекающая акки на валид.
Нужно сделать чтобы эта радость работала через список прокси.

Без прокси все классно работает.

если запускаешь поток с чеком акков через прокси, то если прокси невалиден то поток завершается и акк естественно не чекается и всё идет дальше.

Вопрос. Как все нормально организовать. Чекать прокси на валид перед чеком или как нибудь по другому ?
чекать прокси на валид перед запуском программы

Freedom
14.01.2010, 18:50
чекать прокси на валид перед запуском программы


оригинальный подход ))))

киньте плиз тогда в личку валидных соксов )))

ZdezBilYa
14.01.2010, 18:51
если запускаешь поток с чеком акков через прокси, то если прокси невалиден то поток завершается и акк естественно не чекается и всё идет дальше.
используй try - except

Freedom
14.01.2010, 18:54
используй try - except

т.е.

try
http.post(запрос через прокси);
except
http.post(запрос без прокси);
end;

вот так ?

ZdezBilYa
14.01.2010, 18:57
нет.

try
http.post(запрос через прокси);
except
end;

в except можно делать, что хочешь, например удалять эту проксю, раз через нее соединиться не удалось

drim
14.01.2010, 18:58
оригинальный подход ))))

киньте плиз тогда в личку валидных соксов )))
они продаются

Freedom
14.01.2010, 18:59
нет.

try
http.post(запрос через прокси);
except
end;

в except можно делать, что хочешь, например удалять эту проксю, раз через нее соединиться не удалось

так получается что поток завершается и акк не чекается (

ZdezBilYa
14.01.2010, 19:04
тогда вот так:


error:=true;
while error do
begin
error:=false;
try
http.post;
except
error:=true;
берем другую прокси;
end;
end;

будет повторяться пока запрос не пройдет без ошибок

W!z@rD
14.01.2010, 20:06
завести объект вида

enum Check
{
Unchecked,
Valid,
Invalid,
ProxyError
}

Список/Массив вида
id - CheckValue

Проверка
while(currentAccount.CheckValue == Check.ProxyError || currentAccount.CheckValue == Unchecked)
try
{
тут могут быть варианты вида Valid и Invalid.
break;
}
catch(SocketException)
{
currentAccount.CheckValue = Check.ProxyError;
removeProxy();
}
}
...

Все просто. В цикле проверяем поле которое отвечает за информацию о валидности акка и его статусе проверки.
Если проверили акк, то выставляем соответствующий статус, иначе если ловим ошибку сокета, присваиваем статус говорящий что трабла с прокси.

P.S. забываю уже дельфи :(