PHP SoapClient构造函数极其缓慢
问题描述:
我想对SOAP API做一些测试,并且执行速度非常慢。我做了一些挖掘,发现它是SoapClient构造函数,它需要永久执行。我也尝试使用它的代理来查看它是否是由它产生的http查询,但是这个查询执行得相对较快..在查询之后它会持续约30秒。PHP SoapClient构造函数极其缓慢
下面是参考kcachegrind截图:
下面是在查尔斯代理的WSDL查询:
同样的问题也得到了一个几个月前报道这里:
PHP: SoapClient constructor is very slow (takes 3 minutes)
但他没有得到答案。
任何建议将不胜感激。
编辑:
其中SoapClient的启动代码部分(这是NetSuite的PHP工具包的一部分)
$this->client = new SoapClient($host . "/wsdl/v" . $endpoint . "_0/netsuite.wsdl",
array( "location" => $host . "/services/NetSuitePort_" . $endpoint,
"trace" => 1,
"connection_timeout" => 5,
"typemap" => $typemap,
"user_agent" => "PHP-SOAP/" . phpversion() . " + NetSuite PHP Toolkit " . $version
)
);
答
您正在使用多个用户?我在同一行代码中得到了3-20分钟的滞后,结果与多个用户有关,导致wsdl的多个副本被提取。 http://www.ozonesolutions.com/programming/2011/05/nsclient-login-time/
当您第二次运行脚本并且wsdl文件已在缓存中时会发生什么?另外,您是否尝试过使用本地保存的wsdl文件并测量脚本执行时间? – Zyava
我玩弄WSDL缓存无济于事。而且,正如我所说的那样,根据我在Charles Proxy中发现的内容,在WSDL被请求并返回后,挂起似乎会发生。 – Naatan
检查soap.wsdl_cache_ttl选项。另外,WSDL是否可以通过纯http访问?也许ssl层是导致你身边缓慢的原因。 –