Intereting Posts
Что такое действие или фильтр для изменения постоянной ссылки в Edit Post / Page? Разработка мультисайтового плагина и wp_enqueue_script Лучшая практика для разработки плагина с этим сценарием пользовательские изменения удалены после обновления плагина Как отображать другие пользовательские аватары на странице профиля автора? Отображение пользовательского содержимого в раскрывающемся списке Nav Заказать wp_query по вычисленному полю извлекать почтовые данные и вставлять их на отдельной статической странице html без WordPress Редактировать черновик от другого автора Как получить ссылку на WordPress, чтобы полностью оценить, когда она поступает из facebook Разбивка страниц не работает. Как изменить всю панель администратора WordPress Look and Feel? Перемещенная панель WordPress все еще указывает на сервер тестирования Как передать шаблон url в javascript в области ADMIN моей темы? Фоновое изображение заголовка просто перестало работать

Использование WP_Http для публикации данных в Webservice без блокировки сценария вызова

Я использовал WP_Http для отправки данных в (сторонний) веб-сервис .

Их веб-сервис медленный, как ад, поэтому я не могу дождаться ответа их веб-службы .

Я попытался использовать параметр blocking = false, но он не работает.

Вот мой код, microtime был использован для измерения задержки webservice. Я думал, что, используя blocking = false, скрипт не будет ждать ответа веб-службы, но он ждет …

// Preparing send to Webservice $microtimebefore = round(microtime(true) * 1000); $request = new WP_Http(); $response = $request->post($post_url, array('body' => $body, 'timeout' => 15, 'blocking' => false)); // We're using WP_Http with blocking = false so we are NOT waiting for the webservice response, so we cannot control the webservice's answer. $responsebody = "OK"; $microtimeafter = round(microtime(true) * 1000); $microtimeexecution = $microtimeafter - $microtimebefore; 

Есть ли у вас какие-либо идеи, почему параметр blocking = false кажется проигнорированным?

Благодаря,

Ура,

PHP является синхронным языком по дизайну, поэтому он должен ждать выполнения каждой строки. Если вы вызываете запрос по почте с тайм-аутом 15 с, вы должны ждать до ответа на отправку веб-сервисов или лимита времени ожидания 15 секунд.

Как я вижу, в главном параметре blocking не будет возникать процесс, но просто не анализируйте ответ, чтобы сэкономить вам немного времени. https://core.trac.wordpress.org/browser/trunk/src/wp-includes/class-requests.php#L630

Вы можете сделать запрос с очень малым тайм-аутом, как @mmm сказал или запустить процесс, используя функцию exec .

 exec('curl --data "param1=value1&param2=value2" http://url.com > /dev/null 2>&1 &'); 

Если вы не хотите ждать ответа, но вам это понадобится, вы можете использовать шаблон дизайна обещаний. https://github.com/reactphp/promise