Отправление Запросов POST, не ожидая ответа?

Я пишу простой сервис REST, который отвечает на запросы от клиентов. Все в PHP.

Мое беспокойство, что, когда мой сервер отвечает на запрос, он мог закончить тем, что связал ресурсы, если сторона клиента является слишком медленной в передаче обратно "хорошо" ответа.

Как я отправляю запрос POST через lib_curl, устанавливающий его, чтобы не ожидать каких-либо ответов, а скорее выйти из immidiately после того, как данные POST были отправлены?

Это даже возможно? Спасибо!

28
задан Gotys 3 February 2010 в 09:23
поделиться

3 ответа

Вы не можете просто отправить данные, не получив ответа по HTTP. HTTP всегда идет запрос -> ответ. Даже если ответ очень короткий (например, 200 без текста), ответ должен быть. И каждый HTTP-сокет будет ждать этого ответа.

Если вас не волнует ответ, вы можете добавить процесс на сервер, который отправляет ваши запросы, и вы просто отправляете на него данные своего запроса (например, службу, работающую в фон, проверка базы данных запросов и постоянный запуск запроса всякий раз, когда добавляется новая запись). Таким образом вы выполняете запрос асинхронно и можете завершить работу, как только добавите этот запрос в стек .

Также, как я сказал, клиент не участвует ни в каком общении с php. Php - это серверный язык, поэтому, когда клиент запрашивает веб-страницу (файл php), сервер выполняет этот файл (и выполняет все запросы состояния файла php), а затем возвращает результат клиенту. .

18
ответ дан 28 November 2019 в 03:28
поделиться

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/

2
ответ дан 28 November 2019 в 03:28
поделиться

Я никогда не пробовал это, но установил CURLOPT_TIMEOUT на очень низкое значение может помочь. Попробуйте 0 или 0,1 .

Однако я не знаю, как cURL и клиент будут вести себя с этим, будет ли соединение активно разорвано, когда оно уже установлено и истечет ли тайм-аут. Тебе нужно попробовать. Если вы вызываете сценарии PHP, возможно, ignore_user_abort () сможет обеспечить выполнение ваших сценариев в любом случае.

1
ответ дан 28 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

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