【问题标题】:PHP: Is it better to close SoapClient connection?PHP:关闭 SoapClient 连接会更好吗?
【发布时间】:2019-02-11 13:26:29
【问题描述】:

我创建了以下辅助函数:

function mainSoap(){
    return new SoapClient('https://soap.url',[
        'stream_context' => stream_context_create([
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            ]
        ]);
    ]);
}

我像$result=mainSoap()->GetSometing($parameters);一样使用它

一切正常,但就性能而言,我想知道关闭soap连接是否更好。

更新

我创建了另一个函数以便在收到响应后关闭连接,但我仍然找不到 SoapClient 的关闭方法。

function mainSoap(string $call=null, array $vars=[]){
    $url="https://soap.url";
    $wsdl=new SoapClient($url,[
        'trace' => false,
        'keep_alive' => false,
        'stream_context' => stream_context_create([
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            ]
        ]),
        'compression'   => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE
    ]);
    $response=$wsdl->__soapCall($call,$vars);
    //Looking for something like $wsdl->close();
    return $response;
}

我像$result=mainSoap('GetSometing',[$parameters]);一样使用它

【问题讨论】:

  • 脚本终止时它会被关闭,但如果你不打算再次使用它,那么继续关闭它。如果您打算重复使用它,请保留它,因为创建新连接相对较慢
  • 谢谢@RiggsFolly 我也在考虑这个问题。但我仍然找不到 SoapClient 的 close 方法。
  • 这本身可能会帮助您找到答案。但是由于它是一个对象,只需将其设置为 NULL 就会释放内存,当然在垃圾收集器激活之前它不会被重用
  • mmm.. 根据您的建议,我认为最好更改函数以便返回结果本身并关闭连接。但前提是我知道如何关闭它:D
  • @RiggsFolly 我已经更改了我的函数,以便在响应后关闭soapClient,但仍然找不到关闭/销毁它的方法。

标签: php soap soap-client helper


【解决方案1】:

SoapClient 遵循正常的 HTTP 请求生命周期,

也就是说,你的SoapClient不保持与服务器的持续连接,它只会在调用时连接出去并接收数据,类似于你的浏览器不保持连接请求完成后发送到服务器,因为请求被终止,除非您将 keep_alive 设置为 true。

所以,简而言之,你不能“关闭”SoapClient,因为在你调用它之后没有什么可以关闭的,它已经关闭了连接。

相关链接:

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多