gpt4 book ai didi

java - PHP:SoapClient 构造函数非常慢(需要 3 分钟)

转载 作者:行者123 更新时间:2023-11-30 05:57:17 26 4
gpt4 key购买 nike

我是 PHP 新手。经过大量搜索后,我设法以某种方式使用由 Java 和 PHP 创建的 Web 服务,但问题是 SoapClient 类的构造函数非常慢。这是我的 PHP 代码:

<?
require_once('SOAP/Client.php');
$url = "http://127.0.0.1:8024/_RS?wsdl";
$sc = new SoapClient($url);
?>

有时这需要长达 3 分钟的时间。我不知道问题是什么。创建构造函数后,我可以在 1 秒内在 for 循环中使用它 50 次,因此我非常确定构造函数是减慢代码速度的部分。

您认为是什么导致了这个问题?

提前谢谢您。

PS:更多信息在我的另一个问题中: https://stackoverflow.com/questions/5929669/call-a-wsdl-web-service-created-by-java-from-nushphere-phped

PPS:按照AJ的建议,我使用XDebug和kcachegrind来分析问题。正如你所看到的,我是对的。这是图片: XDebug result in kcachegrind both in % (up) and time(down).

最佳答案

我也有同样的问题。使用部署在 Tomcat 上的相同 Web 服务,php SoapClient 速度非常快。我尝试执行“wget”来查看响应中的 header 是否不同,并且由于问题在于 WSDL 缓存,所以我发现的差异可能是原因:

使用 Tomcat:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Content-Length: 23925
Date: Thu, 08 Mar 2012 23:13:10 GMT
Connection: keep-alive

使用 Endpoint.publish(...)

HTTP/1.1 200 OK
Content-type: text/xml;charset=utf-8
Content-length: 23837

现在我只需要了解如何强制 Endpoint.publish(...) 插入 ServerDate、或连接- header 。

(编辑)我找到了一个解决方案:问题不仅在于分块数据,还在于“保持 Activity ”。可以通过在stream_context 中设置 header “Connection: Close”来防止这种情况。请看下面:

class ImprovedSoapClient extends SoapClient
{
public function __construct($wsdlLocation)
{
parent::__construct(
$wsdlLocation
, array(
, 'cache_wsdl' => WSDL_CACHE_NONE
, 'stream_context'=>stream_context_create(
array('http'=>
array(
'protocol_version'=>'1.0'
, 'header' => 'Connection: Close'
)
)
)
)
);
}
}

关于java - PHP:SoapClient 构造函数非常慢(需要 3 分钟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com