一些请求后无法连接到主机,SoapFault异常

时间:2016-11-30 09:41:12

标签: php laravel soap soap-client lumen

我正在连接到web服务以获取一些数据。我有一个约200K个工作的请求队列,一个工人正在处理它。处理时间为每秒2-3个呼叫。在大约500-1000次调用之后,它会通过以下消息开始获取SoapFault异常:Could not connect to host。即使我收到此错误,我也能正确ping通web服务服务器。

当我禁用soap缓存时,问题仍然存在,但错误更改为Parsing WSDL: Couldn't load from 'http://thewebservice.com/method/Service.asmx?WSDL' : failed to load external entity

连接代码:

$client = new SoapClient('http://thewebservice.com/method/Service.asmx?WSDL');
$response = $client->__soapCall('method name', $parameters)

我合作:

  • PHP 7.0.11
  • Lumen(5.2.9)(Laravel Components 5.2。*)

1 个答案:

答案 0 :(得分:1)

您是否为每个调用都创建一个新的SoapClient实例?在这种情况下,禁用keep_alive只是一种解决方法,可以对此进行改进。

默认情况下,SoapClient发送HTTP标头Connection: Keep-Alive(通过构造函数选项keep_alive)。但是,如果您为队列中的每个呼叫创建一个新的SoapClient实例,则这将每次创建并保持打开状态。如果调用执行得足够快,您最终将遇到约1000个打开的连接的限制,这将导致SoapFault: Could not connect to host

因此,请确保创建一次SoapClient,并将其重新用于后续调用。