2014-11-09 6 views
2

Необходимо сделать этот блок кода асинхронным с остальной частью кода. Его собираются собирать сообщения wp и отправлять запрос на мой url. Плагин должен работать асинхронно и не мешает работе сайта wordpress.Асинхронный PHP-код в WP Plugin

for ($x=0; $x<=n; $x++) { 
$data = posts[$x]; 
$ch = curl_init('http://myurl.com/'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'ACCEPT: application/json', 
'Content-Length: ' . strlen($data)) 
); 

$result = curl_exec($ch); 
curl_close($ch); 
} 
+0

Если вы хотите асинхронно, вам, вероятно, придется идти с Node.js или другим вариантом. PHP не дружит с асинхронным. [В основном единственная альтернатива] (http://php.net/manual/en/book.pthreads.php). –

+0

Нужно сделать этот плагин для самого Wordpress и предоставить его блоггерам, поэтому у вас нет другого варианта, кроме PHP. –

+0

Опять же, PHP является * ужасным *, поэтому все, что вы найдете, будет хакерским обходным путем - но, возможно, [этот вопрос] (http://stackoverflow.com/questions/4626860/how-can-i-run-a-php -script-in-the-background-after-a-form-is-provided) или [этот] (http://stackoverflow.com/questions/858883/run-php-task-asynchronously). –

ответ

0

Правильный способ обработки асинхронных запросов в WordPress - использовать WP-Cron для планирования события. Вы можете планировать его выполнение один раз или с интервалом. См. Некоторые руководства по настройке here. Две основные функции для проверки: wp_schedule_event() и wp_schedule_single_event().

Одна вещь, о которой нужно помнить, заключается в том, что, поскольку ваш код работает только при наличии запроса, если есть низкий трафик, возможно, что запланированное событие не будет работать, когда ожидается. Я написал статью на своем сайте о том, как вы можете использовать crontab совместно с WP-Cron для более точного планирования событий: http://justinsilver.com/technology/wordpress/disable-wp-cron-wordpress/.

+0

Из сообщения: «Способ, которым я управляю WP-Cron на моих сайтах, - полностью отключить его, установив константу DISABLE_WP_CRON в false в wp-config.php.' ... Я думаю, что у вас есть это обратно. – rnevius

+1

@rnevius Спасибо, исправлено. – doublesharp

0

Guzzle Package использования, пример кода:

$request = $client->createRequest('GET', ['future' => true]); 
$client->send($request)->then(function ($response) { 
    echo 'Got a response! ' . $response; 
}); 

Посмотрите, как вы можете install it. Также проверьте дополнительную информацию о RingPHP and Future Responses. Фактически RingPHP используется в качестве слоя обработчика в Guzzle, а внизу React/Promise предоставляет Promises/A поддержку для PHP.

Смежные вопросы