Выполнится ли скрипт на удалённом сервере, если мы не дождёмся ответа сервера?

Статус
В этой теме нельзя размещать новые ответы.

Sergo_Sev

Творец
Регистрация
14 Июн 2008
Сообщения
578
Реакции
193
Если мы обращаемся к удаленному серверу и он к примеру подвис секунд на 30, а мы сделали запрос и через 2 секунды сработал таймаут, то удаленный скрипт выполнится или нет?

PHP:
function f1( $vk )
    {
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 2); // таймаут 2 секунды
curl_setopt ($ch, CURLOPT_TIMEOUT, 2); // таймаут 2 секунды
curl_setopt ($ch , CURLOPT_URL , $vk);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
$url = curl_exec($ch);
curl_close($ch);
     return $url;
}

$url = "https://api.vk.com/method/messages.send.xml?uid="; // обращение по ссылке должно вызвать отправку сообщения
f1($url);
 
Вместо ответа предлагаю маленьку лабораторную работу =) Услышать от кого-то хорошо, а ещё лучше увидеть своими глазами ;)
PHP:
<?php

sleep(10);

file_put_contents ("text.txt", "Я отработал", );

echo "Ok";

?>
Выполняем, ждём 10 секунд, проверяем наличие файлика text.txt. Удаляем файлик, повторяем тоже самое, но сразу после вызова файла закрываем окно браузера - смотрим в папке в течении 10 секунд на предмет появления файлика =)
 
Отличный ответ! :ay:
Значит достаточно просто обратиться к файлу и если сервер жив то скрипт выполнится в любом случае (просто закралось сомнение - а вдруг не выполнится)
 
Не всё так просто...

Для просмотра ссылки Войди или Зарегистрируйся — Устанавливает, необходимо ли прерывать работу скрипта при отключении клиента

Так же полезной может оказаться информация из статьи "Работа с соединениями" - Для просмотра ссылки Войди или Зарегистрируйся

PS: curl_setopt ($ch, CURLOPT_TIMEOUT, 2); // таймаут 2 секунды
это маловато некоторые ответы могут формироваться дольше 2 секунд, у меня до 7 секунд были задержки ответа от апи ВК
 
Для просмотра ссылки Войди или Зарегистрируйся — Устанавливает, необходимо ли прерывать работу скрипта при отключении клиента
Спасибо!!! Полезная статья! В этом направлении я и подумал, что есть подобные нюансы
Как будет тормозить контакт - тогда точно проверю работает или нет

PS: curl_setopt ($ch, CURLOPT_TIMEOUT, 2); // таймаут 2 секунды
это маловато некоторые ответы могут формироваться дольше 2 секунд, у меня до 7 секунд были задержки ответа от апи ВК

В принципе ответ от сервера мне не важен - важно выполнить скрипт и быстро вывести само сообщение из скрипта, без долгого ожидания (столкнулся как раз с тем что скрипт долго выполняется потому и установил таймайт) и важно, что бы ВК API получил мой запрос и сделал то, что от него требуется в этом самом запросе
Или может есть подходящий вариант, что бы сразу сообщение вывести и ответа от контакта дождаться?

И ещё попутный вопрос - в чем разница между CURLOPT_TIMEOUT и CURLOPT_CONNECTTIMEOUT?
Как я понял из мануала - CURLOPT_CONNECTTIMEOUT это время ожидания ответа от сервера, а CURLOPT_TIMEOUT это время выполнения самой функции, но что в первом случае мы ждём ответа и потом продолжаем работу скрипта, что во втором
 
И ещё попутный вопрос - в чем разница между CURLOPT_TIMEOUT и CURLOPT_CONNECTTIMEOUT?
Как я понял из мануала - CURLOPT_CONNECTTIMEOUT это время ожидания ответа от сервера, а CURLOPT_TIMEOUT это время выполнения самой функции, но что в первом случае мы ждём ответа и потом продолжаем работу скрипта, что во втором
CURLOPT_CONNECTTIMEOUT - The number of seconds to wait while trying to connect. Use 0 to wait indefinitely.
CURLOPT_TIMEOUT - The maximum number of seconds to allow cURL functions to execute.

CURLOPT_CONNECTTIMEOUT - отвечает только за tcp соединение, обработка и отправка http запроса в него не входит.
 
CURLOPT_CONNECTTIMEOUT - время, в течении которого курл пытается подключится к серверу (при очень медленном подключении или ддосе сервера стоит увеличить)
CURLOPT_TIMEOUT - время на передачу самого запроса. Здесь зависимость от скорости подключения и количества передаваемых данных. В случае ТС наиболее актуально время обработки запроса сервером, т.е. данные могут передаться за 0,1 секунды, а обрабатывать их ВК будет несколько секунд...

Выставляя первый параметр слишком маленьким есть шанс, что до вк запрос просто не дойдёт. Сделав слишком маленьким второй параметр мы можем лишиться ответа от api и не узнаем, что произошло с нашим запросом. ВК может попросить разгадать каптчу или выдать другую ошибку.

Если надо быстро выдать ответ пользователю - записывай параметры запроса к вк в БД или текстовый файл и выполняй по крону или постоянно запущенным демоном.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху