Я пишу простой сервис REST, который отвечает на запросы от клиентов. Все в PHP.
Мое беспокойство, что, когда мой сервер отвечает на запрос, он мог закончить тем, что связал ресурсы, если сторона клиента является слишком медленной в передаче обратно "хорошо" ответа.
Как я отправляю запрос POST через lib_curl, устанавливающий его, чтобы не ожидать каких-либо ответов, а скорее выйти из immidiately после того, как данные POST были отправлены?
Это даже возможно? Спасибо!
Вы не можете просто отправить данные, не получив ответа по HTTP. HTTP всегда идет запрос -> ответ. Даже если ответ очень короткий (например, 200 без текста), ответ должен быть. И каждый HTTP-сокет будет ждать этого ответа.
Если вас не волнует ответ, вы можете добавить процесс на сервер, который отправляет ваши запросы, и вы просто отправляете на него данные своего запроса (например, службу, работающую в фон, проверка базы данных запросов и постоянный запуск запроса всякий раз, когда добавляется новая запись). Таким образом вы выполняете запрос асинхронно и можете завершить работу, как только добавите этот запрос в стек .
Также, как я сказал, клиент не участвует ни в каком общении с php. Php - это серверный язык, поэтому, когда клиент запрашивает веб-страницу (файл php), сервер выполняет этот файл (и выполняет все запросы состояния файла php), а затем возвращает результат клиенту. .
http://curl.haxx.se/mail/lib-2002-05/0090.html
libcurl не имеет асинхронного интерфейса. {{ 1}} Вы можете сделать это самостоятельно, используя потоки или используя неблокирующий "мультиинтерфейс", который предлагает libcurl. Прочтите о мультиинтерфейсе здесь:
http://curl.haxx.se/libcurl/c/libcurl-multi.html
Пример мультиинтерфейса PHP здесь:
http : //www.phpied.com/simporaryuos-http-requests-in-php-with-curl/
Я никогда не пробовал это, но установил CURLOPT_TIMEOUT
на очень низкое значение может помочь. Попробуйте 0
или 0,1
.
Однако я не знаю, как cURL и клиент будут вести себя с этим, будет ли соединение активно разорвано, когда оно уже установлено и истечет ли тайм-аут. Тебе нужно попробовать. Если вы вызываете сценарии PHP, возможно, ignore_user_abort ()
сможет обеспечить выполнение ваших сценариев в любом случае.