killer8080
5.02.2014 - 11:43
SoMeOnE
Тут надо исходить из того, где именно происходит задержка? Долго устанавливается соединение с сервером, или ожидание ответа? Если задержка с ответом, то проблему можно обойти, если не дожидаться ответа сервера. Шлем запрос через сокет, и тут же закрываем соединение.
SoMeOnE
5.02.2014 - 12:08
killer8080, а как установить с чем имено проблемы. Скорей всего проблемы с ответом. Пока запостит, пока ответ придет.
А тот метод, которым я сейчас делаю неоптимален?
P.S ну я понял как посмотреть где заддержка. Просто замеры сдлаю))
killer8080
5.02.2014 - 12:15
Цитата (SoMeOnE @ 5.02.2014 - 10:08) |
А тот метод, которым я сейчас делаю неоптимален? |
Ну он требует запуска дополнительного процесса, в принципе проблем нет, если такие запросы не часты, и есть возможность запускать консольные скрипты.
Цитата (SoMeOnE @ 5.02.2014 - 08:45) |
Можешь показать легкий пример с форками, чтобы разобраться. |
форки не прокатят из под апача
SoMeOnE
5.02.2014 - 12:20
инициализация происходит мнгновенно.
а вот этот код
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/'.$post['userid'].'/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result= curl_exec($ch);
curl_close ($ch);
около 3 секунд обрабатывается
SoMeOnE
5.02.2014 - 12:40
MiksIr, прочитав про мультикурл я не разобрался как послать запрос, чтобы скрипт продолжил работу.
Как я понял, можно просто много самих курл запросов посылать параллельно. нет?
На данный момент я сделал так. работает.
exec("nohup php -q /var/www/domain/fb_post.php access_token={$post['access_token']} userid={$post['userid']} name={$user['name']} photo_name={$article['photo_name']} >> script_log.txt 2>&1 &");
Это нормально?
Сколько оказывается вариантов есть)
killer8080
5.02.2014 - 12:45
Цитата (MiksIr @ 5.02.2014 - 10:28) |
Теоретически - прокатят, почему бы нет. |
потому что php не может форкать процесс апача.
Цитата (MiksIr @ 5.02.2014 - 10:25) |
Как раз форки - это не асинхронная работа. |
да не уж то
SoMeOnEпример на сокетах
$fh = @fsockopen($domen, $port, $err_num, $err_str, $timeout);
if ($fh) {
$query = http_build_query($post_data);
fwrite($fh,
"POST $uri HTTP/1.0\r\n" .
"Host: $domen\r\n" .
"Content-Length: " . strlen($query) . "\r\n" .
"Content-Type: application/x-www-form-urlencoded\r\n\r\n" .
$query
);
fclose($fh);
}
SoMeOnE
5.02.2014 - 13:12
Цитата (MiksIr @ 5.02.2014 - 08:44) |
Вам нужно, что бы скрипт продолжил работу или что бы он завершил ее и сказал клиенту "все ок", а сам при этом постил в фейсбук? |
Мне нужно, чтобы скрипт мне вернул success об успешном добавлении в базу.А сам продолжал постить в фб.
Скрипт до возвращении success, начинает пост в фб. На данный момент запустил отдельный процесс, как советовали лучше. Он уже не спотыкается. Сразу возвращает овтет. А на фб появляется, через 2-3 секунды.
SoMeOnE
5.02.2014 - 13:13
killer8080, спасибо за прмиер. С ним тоже буду разбираться.
killer8080
5.02.2014 - 13:14
если одна задача выполняется в родительском процессе, а другая в дочернем, независимо друг от друга разве это не асинхронность?
Цитата (MiksIr @ 5.02.2014 - 10:50) |
Но асинхронность может быть и без форка. |
это бесспорно
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.