SoMeOnE
28.01.2014 - 02:26
Что-то вроде пишут об этом в сети. Но ничего не подходит. Реально ли послать запрос курл, но чтобы скрипт соот. продолжил работу, а не как обычо ждал ответа?
alexbel2404
28.01.2014 - 03:27
Можно использовать pthreads, но для этого нужен
php, собранный с zts.
http://pthreads.org/
linker
28.01.2014 - 08:44
Необязательно pthreads, в сети масса примеров аля многопоточности, например, через pcntl_fork()
_____________
Gear FrameworkGear Framework на Github
vagrand
28.01.2014 - 09:40
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
28.01.2014 - 10:54
Давайте я опишу задачу. Есть мобильное прложение. При некоторых действиях юзера, они отображаются у него на фб стене. Так вот запрос на пост к фб уходит много безполезного времени. По большому счету не страшно, если иногда и не запоститься там, что-то.
Теперь я думаю может просто возвращать ответ сразу, а потом посылать запрос на пост в фб.
vagrand
Крон имеется ввиду?
vagrand
28.01.2014 - 11:05
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
28.01.2014 - 15:46
Если изменения нужна не мгновенно, но требуют много времени для выполнения в http-cliente, то не выполняй эту функцию сразу, а запомни только то, что она должен сделать (например в таблице, с названием скрипта и нужными параметрами) и переходи к другим проблемам.
cronjob или demon может с небольшим промежутком времени читать с таблицы нужные задания и выполнять их в независимости от протекания процессов которые видит клиент.
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();
SoMeOnE
28.01.2014 - 16:34
SlavaFr
Они нужны не мнгновено, но и задержки каждый раз особой быть не должно.
Чтобы юзер не нервничал и не ждал 10-15 секунд пока на его стену запоститься, я хочу отдавать сразу ответ. А через полминуты у него на стене появиться (в некоторых случаях не появится допустим. это не страшно)
А запускать в этом случае крон на каждую минуту не выгодно) Юзеров то мало.
alexbel2404
28.01.2014 - 16:50
Из родительского скрипта запускай скрипт постинга в фб с передачей параметров, если нужно:
exec("nohup php -q /var/www/site.com/script.php {$i} >> script_log{$i}.txt 2>&1 &");
А там уже отлавливай аргументы в $argv
SoMeOnE
28.01.2014 - 16:52
ок. разбираю эти методы. и то, что выше сказал SlavaFr и MiksIr ответили
SoMeOnE
5.02.2014 - 03:42
Цитата (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 по ассоциативным ключам нельзя передавать параметры. А только по цифрам должен ориентироваться ?
SoMeOnEМультизапрос в CURL тебе явно не подходит, потому что это всего лишь одновременная посылка нескольких запросов, а не асинхронная работа. Классический вариант - это форкаться.
_____________
Gear FrameworkGear Framework на Github
vagrand
5.02.2014 - 09:39
SoMeOnE
Цитата |
В $argv по ассоциативным ключам нельзя передавать параметры. А только по цифрам должен ориентироваться ? |
@param @return
public function getParams($delimiter = '=')
{
global $argv;
global $argc;
if ($argc < 2) {
return false;
}
unset($argv[0]);
$parameters = array();
foreach ($argv as $param) {
$temp = explode($delimiter, $param);
if (count($temp) == 2) {
$parameters[$temp[0]] = $temp[1];
}
}
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
5.02.2014 - 10:45
linker
Да курл я уже разобрался для другого.
А вот то, что советуют vagrand и alexbel2404 самое то) Уже все рабоатет как надо. Просто с данными немного неудобно работать. Особенно если что-то придет пустое все запутается. Но вроде сейчас получится. объяснили.
Можешь показать легкий пример с форками, чтобы разобраться. У меня вообще сразу ошибку выкидывает. библиотека даже не установлена.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.