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

标签 java php web-services

我是 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/

相关文章:

java - 寻找高性能 Java xy 线绘图仪/绘图仪

java - 防止对表单登录页面的 HTTP 无效直接引用防止重定向

java - 如果重定向失败则重定向到新的 url

ios - 在没有互联网时防止 JSONSerialization 崩溃我的应用程序的最佳方法?

java - 如何在 url 请求中发送数组

java - Apache CXF 文档功能

java - TestNG:确定下一步是哪些测试方法

php - 有没有办法在 Opencart 中显示 youtube 视频而不是产品图片?

php - mysql数据库中的Swift数组

php - 从慢速查询日志提高 MySQL 查询性能