Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Многопоточность через прокси (https://forum.antichat.xyz/showthread.php?t=170828)

Freedom 14.01.2010 18:39

Многопоточность через прокси
 
Ребят объясните плиз принципы построения многопоточных приложений через прокси.

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

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

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

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

drim 14.01.2010 18:42

Цитата:

Сообщение от Freedom
Ребят объясните плиз принципы построения многопоточных приложений через прокси.

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

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

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

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

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

Freedom 14.01.2010 18:50

Цитата:

Сообщение от drim
чекать прокси на валид перед запуском программы


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

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

ZdezBilYa 14.01.2010 18:51

Цитата:

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

используй try - except

Freedom 14.01.2010 18:54

Цитата:

Сообщение от ZdezBilYa
используй 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
оригинальный подход ))))

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

они продаются

Freedom 14.01.2010 18:59

Цитата:

Сообщение от ZdezBilYa
нет.

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. забываю уже дельфи :(


Время: 13:39