[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возможен ли ассинхронный curl запрос
Страницы: 1, 2, 3, 4, 5, 6, 7
SoMeOnE
Что-то вроде пишут об этом в сети. Но ничего не подходит. Реально ли послать запрос курл, но чтобы скрипт соот. продолжил работу, а не как обычо ждал ответа?
alexbel2404
Можно использовать pthreads, но для этого нужен php, собранный с zts.
http://pthreads.org/
linker
Необязательно pthreads, в сети масса примеров аля многопоточности, например, через pcntl_fork()

_____________
Gear Framework
Gear Framework на Github
vagrand
SoMeOnE
Если работать на 8nix платформе, то можно запустить скрипт в бэкграунде, который и выполнит curl запрос.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
SoMeOnE
Давайте я опишу задачу. Есть мобильное прложение. При некоторых действиях юзера, они отображаются у него на фб стене. Так вот запрос на пост к фб уходит много безполезного времени. По большому счету не страшно, если иногда и не запоститься там, что-то.

Теперь я думаю может просто возвращать ответ сразу, а потом посылать запрос на пост в фб.

vagrand
Крон имеется ввиду?
vagrand
SoMeOnE
Цитата
Крон имеется ввиду?


Нет, не крон. Напиши php cli скрипт и запускай его через exec с параметром "&". В этом случае родительский скрипт не будет дожидаться его выполнения.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
SlavaFr
Если изменения нужна не мгновенно, но требуют много времени для выполнения в http-cliente, то не выполняй эту функцию сразу, а запомни только то, что она должен сделать (например в таблице, с названием скрипта и нужными параметрами) и переходи к другим проблемам.
cronjob или demon может с небольшим промежутком времени читать с таблицы нужные задания и выполнять их в независимости от протекания процессов которые видит клиент.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
SoMeOnE
SlavaFr
Они нужны не мнгновено, но и задержки каждый раз особой быть не должно.
Чтобы юзер не нервничал и не ждал 10-15 секунд пока на его стену запоститься, я хочу отдавать сразу ответ. А через полминуты у него на стене появиться (в некоторых случаях не появится допустим. это не страшно)
А запускать в этом случае крон на каждую минуту не выгодно) Юзеров то мало.
alexbel2404
Из родительского скрипта запускай скрипт постинга в фб с передачей параметров, если нужно:
exec("nohup php -q /var/www/site.com/script.php {$i} >> script_log{$i}.txt 2>&1 &");

А там уже отлавливай аргументы в $argv
SoMeOnE
ок. разбираю эти методы. и то, что выше сказал SlavaFr и MiksIr ответили
SoMeOnE
Цитата (alexbel2404 @ 28.01.2014 - 12:50)
Из родительского скрипта запускай скрипт постинга в фб с передачей параметров, если нужно:
exec("nohup php -q /var/www/site.com/script.php {$i} >> script_log{$i}.txt 2>&1 &");

А там уже отлавливай аргументы в $argv

В $argv по ассоциативным ключам нельзя передавать параметры. А только по цифрам должен ориентироваться ?
linker
SoMeOnE
Мультизапрос в CURL тебе явно не подходит, потому что это всего лишь одновременная посылка нескольких запросов, а не асинхронная работа. Классический вариант - это форкаться.

_____________
Gear Framework
Gear Framework на Github
vagrand
SoMeOnE
Цитата
В $argv по ассоциативным ключам нельзя передавать параметры. А только по цифрам должен ориентироваться ?



/**
* Method return script params
*
*
@param string $delimiter
*
@return array or bool
*/

public function getParams($delimiter = '=')
{
global $argv;
global $argc;

// Check is script was ran with parameters
if ($argc < 2) {
return false;
}

// Prepare params
unset($argv[0]);
$parameters = array();
foreach ($argv as $param) {
$temp = explode($delimiter, $param);
if (count($temp) == 2) {
$parameters[$temp[0]] = $temp[1];
}
}


// Return params
return $parameters;
}


Вызывать вот так:

./script.php name=value name_2=value_2


_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
SoMeOnE
linker
Да курл я уже разобрался для другого.
А вот то, что советуют vagrand и alexbel2404 самое то) Уже все рабоатет как надо. Просто с данными немного неудобно работать. Особенно если что-то придет пустое все запутается. Но вроде сейчас получится. объяснили.

Можешь показать легкий пример с форками, чтобы разобраться. У меня вообще сразу ошибку выкидывает. библиотека даже не установлена.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.