使用wp_http在不阻止调用者脚本的情况下将数据发布到Web服务

时间:2017-11-30 作者:SeriousBen74

我一直在使用WP_Http 将数据发布到(第三方)webservice。

他们的Web服务is slow like hell so I can\'t wait for their webservice\'s answer.

我已尝试使用参数blocking = false 但它似乎不起作用。

这是我的代码,微时间被用来测量webservice的延迟。我认为使用blocking=false,脚本不会等待webservice响应,但它确实会等待。。。

// 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似乎被忽略了吗?

谢谢

干杯

1 个回复
SO网友:kierzniak

PHP在设计上是同步语言,所以它必须等待每一行的执行。如果您在15秒超时的情况下调用post请求,则必须等待webservice发送响应或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 &\');
若您不想等待响应,但最终需要它,那个么您可以使用promise设计模式。https://github.com/reactphp/promise

结束

相关推荐

How deactivate the http-api

为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复