@Us59

Как работать с call Back выборкой из БД?

Мы отправляем запрос и получаем ответ через Call Back когда наш запрос готов.

Допустим мы отправили 20 запросов, и мгновенно мы получили ответы через Call Back, далее я передаю параметры в ф-цию.
Ф-ция сначала делает выборку из БД и выбирает IP из БД, который далее мы подставляем в CURL PROXY параметр.
Проблема в том, что сайт, к которому делаем CURL запрос возвращает пустоту после 2-3 запросов, по всей видимости из-за того, что в течении 1-5 секунд с 1 IP делается 20 запросов.

Соответственно, приходим к выводу, что мы должны как-то отмечать IP который используется в текущий момент для отправки запроса и для других 19 выбирать другие IP адреса.
В БД в таблице IP создал поле USED и когда делаем выборку IP я добавил условие, чтобы он выбирал только те, которые = 0, но как сделать пометку о том, что мы забрали 1 IP ??

Делать UPDATE в бд каждый раз? это будет выглядеть так:
выбрали 111.111.111.10
сделали UPDATE set USED = 1 where ....
через 0,01 секунду делаем CURL запрос, на который получаем ответ через 1 секунду
делаем снова UPDATE где устанавливаем USED 0

Это нам придется для 20 запросов сделать 40 обращений в БД - как-то не очень получается, насколько это нагрузит сервер если принимать call backи каждую 1 минуту в размере 20 шт............
К тому же, я хочу сделать так, чтобы USED менялся не когда curl запрос завершен, а когда прошло 15 секунд с момента завершения CURLа, иначе приходим к тому от чего бежали, если изменения в БД будут вноситься так быстро, то 1 IP может использоваться много раз в течении 5 секунд.

Подскажите, что можно придумать в моем случае?) Есть варианты без 40 запросов в БД? Если нет, то как делать UPDATE чтобы не получалось что в течении 5 секунд 1 IP используется несколько раз.
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
@php_raper
Если я правильно понял, вы хотите чтобы при каждом запросе по curl для удного пользователя с одним СВОИМ IP исходящем, не делалась выбора в базу, где хранится стэйт свободных IP для подключения, тогда решением будет:

Попробуйте использовать сессию и авторизуйте пользователя для одного IP, продумайте механизм авторизации для вашей работы приложения. Тем самым IP будет зарезервирован, при повторном подключении по CURL проверяйете авторизацию, если не авторизован проводите механизм авторизации, если авторизован выполняйте дальнейшее действия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы